рдХреЛрдб рдЦреЛрдЬ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд┐рд╕реА рднреА рдЖрдИрдбреАрдИ рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЬрд╛рд╡рд╛ рдореЗрдВ, рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЦреЛрдЬ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрдХреНрд╕рд░ рдЯрд╛рдЗрдк рд╣рд╛рдпрд░рд╛рд░реНрдХреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рджрд╛рдИрдВ рдУрд░ рдХреА рдЫрд╡рд┐ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд░реНрдЧреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдирд╛ рдЕрдХреНрд╖рдо рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдкреВрд░реА рдХреНрд▓рд╛рд╕ рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛рдП рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдРрд╕рд╛ рддрдм рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╕рдВрдХрд▓рди рдЖрдИрдбреАрдИ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рди рдХрд┐ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░реИрдбрд▓ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реЛред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдмрд╕реЗ рдЕрджреНрдпрддрд┐рдд рд╕реВрдЪрдирд╛ рдкреНрд░рджрд╛рддрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рддрддреНрдХрд╛рд▓ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдвреВрдВрдврдирд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИред Foo
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЙрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ implements Foo
рдФрд░ implements Foo
рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ рдЬреЛ extends Foo
рдХреЛ extends Foo
, рд╕рд╛рде рд╣реА new Foo(...) {...}
рдЕрдирд╛рдо рдХрдХреНрд╖рд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдвреВрдВрдвреЗрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рдПрдХ org.example.evilcompany.Foo
рд╣реИ: рдЖрдк com.example.goodcompany.Foo
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ org.example.evilcompany.Foo
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдореВрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
рдЕрдХреЗрд▓реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдХрд░, рдпрд╣ рдмрддрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ Foo
рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдирд╛рдо рдХреНрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЧреМрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХреЗрдЬ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ JAR рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ)ред рдпрджрд┐ рд╣рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп рдЙрдЪрд┐рдд рдкреНрд░рддреАрдХ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрдХреНрд░рдордг рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ MyFoo.java
рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдЕрдиреНрдп рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред рд╣рдо Foo
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХреЛ рдЖрдЧреЗ org.example.foo
, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MyFoo.java
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓реЗ рдмрд┐рдирд╛, org.example.bar
рдкреИрдХреЗрдЬ рд╕реЗ org.example.bar
рдкреИрдХреЗрдЬ рддрдХ, рд▓реЗрдХрд┐рди Foo
рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдирд╛рдо рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
IntelliJ IDEA рдореЗрдВ, рдЗрдВрдбреЗрдХреНрд╕ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рддрд░рдл, рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдХреНрдпрд╛ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдкреНрд░рдореБрдЦ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдирд╛рдореЛрдВ рдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдордЬрд╝рдмреВрддреА рд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдЙрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╡рд╣ рд╕рдм рдХреБрдЫ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдЫреЛрдЯреЗ рдирд╛рдо рд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкреНрд░рддреАрдХ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░рд░реНрдердХ рдкреНрд░рддреАрдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ рдФрд░ рдЬрд╛рдБрдЪ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреАрдЬреЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрдВ, рдЬрдм рд╣рдо рдЬрд┐рд╕ рд╡рд░реНрдЧ рдХреЗ рдмрдЪреНрдЪреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдлрд┐рд░, рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдирд╛рдо рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рдФрд░ рд╡рд┐рдзрд┐ рд╕рдВрджрд░реНрдн рд╣реЛрдВрдЧреЗред рдЕрдм рд╣рдо рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдХреНрдпрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ?
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ:
@FunctionalInterface public interface StringConsumer { void consume(String s); }
рдХреЛрдб рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдВрдмреЛрджрд░ рднрд╛рд╡ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
() -> {}
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рд▓рдВрдмреЛрджрд░ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЕрдиреБрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдЪрд┐рдд рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреИрд░-рд╢реВрдиреНрдп рдХреЗ рдмрдЬрд╛рдп рд╢реВрдиреНрдпред рдЖрдорддреМрд░ рдкрд░ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, s -> list.add(s)
рдЖрдкрдХреЛ list
рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ add
, рдФрд░, рд╕рдВрднрд╡рддрдГ, рдПрдХ рдирд┐рдпрдорд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдВрдЬреЗрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рдПрдВред рдЗрд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рдпрджрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд╛рдВрдЪ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдлрд┐рд▓реНрдЯрд░ рднрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓реИрдореНрдмреНрдбрд╛ рд░рдЦреЗрдЧрд╛ред рдпрд╣ рдФрд░ рднреА рдмрджрддрд░ рд╣реИ рдЬрдм рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреЛрдИ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рд╕рдВрджрд░реНрдн рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдЪреАрдЬреЛрдВ рдХреЛ рд╕реАрдзреЗ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХреНрдпрд╛ рд╣реИред рдХрднреА-рдХрднреА, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд▓рдВрдмреЛ рдпрд╛ рд╡рд┐рдзрд┐ рд╕рдВрджрд░реНрдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдпреЗ рдорд╛рдорд▓реЗ рд╕рднреА рд▓рдВрдмреЛрдВ рдХреЗ рдмрд╣реБрдд рдЫреЛрдЯреЗ рдкреНрд░рддрд┐рд╢рдд рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд▓реИрдореНрдмрджрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
list.stream() .filter(s -> StringUtil.isNonEmpty(s)) .map(s -> s.trim()) .forEach(s -> list.add(s));
рддреАрди рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрд░рдХреЛрдирд╕реБрдореЗрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреЛрдИ рдирд╣реАрдВред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдИрдбреАрдИ рдХреЛ рдЪрд╛рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрдВ рд╕рдЯреАрдХ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ list
рдмрд┐рд▓реНрдХреБрд▓ java.util.List
рдирд╣реАрдВ рд╣реИ, рдФрд░ list.stream()
java.util.stream.Stream
рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рд▓реМрдЯрд╛рддреА рд╣реИ? рдлрд┐рд░ рд╣рдореЗрдВ list
рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдордЬрд╝рдмреВрддреА рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЦреЛрдЬ рдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдордиреЗ java.util.List
рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдЕрдкрдиреА рдЦреБрдж рдХреА рдПрдХ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рдеред рдЦреЛрдЬ рдХреЛ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рдорд╛рдирдХ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдРрд╕реЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ, рдЬрд┐рдирд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд╕рднреА рдЬрд╛рд╡рд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдПрдХ рд╡реИрдз рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЪрд╛рд░ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрддреЗ рд╣реИрдВ: рд╢реВрдиреНрдп, рдЧреИрд░-рд╢реВрдиреНрдп, рдмреВрд▓рд┐рдпрди, рдФрд░ рдХреЛрдИ рд╣реЛ)ред рдФрд░ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрди рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдкреАрдПрд╕рдЖрдИ рд╡реГрдХреНрд╖ (рдкреНрд░рддреАрдХ рд╕рдВрдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреЗрдбрд╝, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди, рдФрд░ рдЕрдиреНрдп рд╕реНрдорд╛рд░реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ) рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд▓рдВрдмреЛрджрд░ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЙрдореНрд░ рд▓рдЧ рдЬрд╛рдПрдЧреА, рднрд▓реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рджреЛ рд╣реЛрдВред
рддреЛ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрджрдо рдЙрдард╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рдкреВрдЫреЗрдВ (рдорд╣рдВрдЧрд╛ рдирд╣реАрдВ)
- рдкреАрдПрд╕рдЖрдИ рдмрдирд╛рдПрдБ (рдорд╣рдВрдЧрд╛)
- рд▓рдВрдмрд░ рдкреНрд░рдХрд╛рд░ (рдмрд╣реБрдд рдорд╣рдВрдЧрд╛)
рдЬрд╛рд╡рд╛ 8 рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдПрдХ рдЕрддреНрдпрдВрдд рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдПрдХ рдЬрдЯрд┐рд▓ рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рдХрдИ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рдВрд╕реНрдерд╛рдЧрдд рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдорд╛рдиреЛрдВ рдХреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдзреНрдпрд╛рдп 18 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣рд╛рд░реНрдб-рд╣рд┐рдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдЬрд╛рд░реЛрдВ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдПрдХ рдорд╣рдВрдЧрд╛ рдХрд╛рдо рд╣реЛрдЧрд╛ред
рдпрд╣рд╛рдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдиреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдХрд╛рдЯрдирд╛ рд╕рдВрднрд╡ рд╣реИ: рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдареЛрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм рддрдХ рдХреЛрдИ рд╡рд┐рдзрд┐ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдЬрд╣рд╛рдВ рд▓реИрдореНрдмрдбрд╛ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЪрд░рдг рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо java.util.function.Function<T, R>
рд▓реИрдореНрдмреНрдбрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ T
рдФрд░ R
рдХреЗ рд╕рдВрд╡реИрдзрд╛рдирд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ: рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд▓реИрдореНрдмрдбрд╛ рдХреЛ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдирд╣реАрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:
static <T> void doSmth(Class<T> aClass, T value) {}
рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ doSmth(Runnable.class, () -> {})
рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд▓рдВрдмреЛрджрд░ рдкреНрд░рдХрд╛рд░ T
рд░реВрдк рдореЗрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдПрдХ рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реИред рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕реАрдкреАрдпреВ рд╕рдордп рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд▓рдЧрднрдЧ 10%, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЬрдм рд╕рдЯреАрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рдЗрд╕реЗ рд▓рдЧрднрдЧ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕реЗ рдХреЗрд╡рд▓ рдорд┐рдЯрд╛рдП рдЧрдП рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВ рдФрд░ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдХреЛрдИ рдХрдореА рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдмрд╕ рдПрдХ рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдЬрдм рддрдХ рдорд┐рдЯрд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рдЖрдЗрдП рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдзрд╛рд░рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрдВрддрд┐рдо StringConsumer
рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
list
рдЪрд░ -> java.util.List
рдкреНрд░рдХрд╛рд░List.stream()
рд╡рд┐рдзрд┐ тЖТ java.util.stream.Stream
рдкреНрд░рдХрд╛рд░Stream.filter(...)
рд╡рд┐рдзрд┐ -> java.util.stream.Stream
рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ filter
рддрд░реНрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ- рдЗрд╕реА рддрд░рд╣,
Stream.map(...)
рд╡рд┐рдзрд┐ тЖТ java.util.stream.Stream
рдкреНрд░рдХрд╛рд░ Stream.forEach(...)
рд╡рд┐рдзрд┐ тЖТ рдРрд╕реА рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ Consumer
рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ StringConsumer
рдирд╣реАрдВ рд╣реИред
рдФрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреИрд╕реЗ рдирд┐рдпрдорд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрддрд┐рднрд╛рд░рд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рд╣рдо рдЙрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рд╣реА рдЕрдзрд┐рднрд╛рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрднреА-рдХрднреА рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐: рдпрджрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
CompletableFuture.supplyAsync(Foo::bar, myExecutor).thenRunAsync(s -> list.add(s));
рдпрд╣рд╛рдБ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐:
- рджреЛ
CompletableFuture.supplyAsync
рддрд░реАрдХреЗ рд╣реИрдВ; рдкрд╣рд▓рд╛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рджреЛ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рджреВрд╕рд░рд╛ рдЪреБрдирддреЗ рд╣реИрдВред рдпрд╣ CompletableFuture
рд▓реМрдЯрд╛рддрд╛ рд╣реИред - рд╕рд╛рде рд╣реА рджреЛ
thenRunAsync
рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ Runnable
рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ StringConsumer
рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддреА рд╣реИрдВ рдпрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдХреНрд╕рд░ рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:
new StringBuilder().append(foo).append(bar).chars().forEach(s -> list.add(s));
new StringBuilder()
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ java.lang.StringBuilder
рдмрдирд╛рддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрднреА рднреА рд╕рдВрджрд░реНрдн рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ new Foo<>(x, y, z)
, рддреЛ рд╣рдо рдЯрд╛рдЗрдк рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ Foo
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рд╣реИред- рдмрд╣реБрдд рд╕рд╛рд░реЗ
StringBuilder.append
рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА java.lang.StringBuilder
рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддреЗ java.lang.StringBuilder
, рдЗрд╕рд▓рд┐рдП рд╣рдо foo
рдФрд░ bar
рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред - рдПрдХ
StringBuilder.chars
рд╡рд┐рдзрд┐ рд╣реИ, рдФрд░ рдпрд╣ java.util.stream.IntStream
рджреЗрддрд╛ рд╣реИред - рдПрдХ рдПрдХрд▓
IntStream.forEach
рд╡рд┐рдзрд┐ рд╣реИ, рдФрд░ рдпрд╣ IntConsumer
рдкреНрд░рдХрд╛рд░ рд▓реЗрддрд╛ рд╣реИред
рднрд▓реЗ рд╣реА рдХрдИ рд╡рд┐рдХрд▓реНрдк рдмрдиреЗ рд░рд╣реЗрдВ, рдлрд┐рд░ рднреА рдЖрдк рдЙрди рд╕рднреА рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ForkJoinPool.getInstance().submit(...)
рдкреНрд░рдХрд╛рд░ ForkJoinPool.getInstance().submit(...)
рдпрд╛ Callable
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рднреА рд╣рдо рдЗрд╕ рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдм рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рддреЛ рдЪреАрдЬреЗрдВ рдмрджрддрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдлрд┐рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдордиреЗ рдПрдХ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдореЗрд░реА StreamEx рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ AbstractStreamEx<T, S extends AbstractStreamEx<T, S>>
рд╕рд╛рд░ рдХреНрд▓рд╛рд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ S filter(Predicate<? super T> predicate)
рдЬреИрд╕реЗ рддрд░реАрдХреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рд▓реЛрдЧ рдХрдВрдХреНрд░реАрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ StreamEx<T> extends AbstractStreamEx<T, StreamEx<T>>
рд╡рд░реНрдЧред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ S = StreamEx
ред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рдВрдЧрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдкреАрдПрд╕рдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдХреЛрдб рдХреА 500 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди 480 рдкрд░ рд▓реИрдВрдмрдбрд╛ рдЙрд╕рдХреА рдХреНрд╡реЗрд░реА рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред рдЖрдЗрдпреЗ рдЕрдкрдиреА рд╕реНрдЯреНрд░реАрдо рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ:
list.stream() .filter(s -> StringUtil.isNonEmpty(s)) .map(s -> s.trim()) .forEach(s -> list.add(s));
рдпрджрд┐ list
рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░, рдПрдХ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░, рдпрд╛ рд╡рд░реНрддрдорд╛рди рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдХреНрд░рдордг рдЪрд░рдг рдореЗрдВ, рд╣рдо рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓рдШреБ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо List
ред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЕрдВрддрд┐рдо рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрд╣ рд▓реИрдореНрдмреНрдбрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ forEach
рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ map
рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ filter
рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ stream
рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдПрдХ List
рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рд╕рднреА рд▓рдВрдмреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреАрдПрд╕рдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд┐рдирд╛ рд▓рдВрдмреЛрджрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЫреЛрдЯреА List
рдирд╛рдо рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рдЦреЛрдЬ рдХрд░рдиреА рд╣реЛрдЧреАред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рди рдХреЗрд╡рд▓ java.util.List
рдмрд▓реНрдХрд┐ java.awt.List
рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рд╕реЗ рдХреБрдЫ рднреА рдкрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрд╛рдж, рдпреЗ рд╕рднреА рдХрдХреНрд╖рд╛рдПрдВ рдЙрд╕реА рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд╖реНрдХрд╛рд╕рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреА рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдереАрдВред рдирд┐рд░рд░реНрдердХ рдХрдХреНрд╖рд╛рдПрдВ рдЕрдХреНрд╕рд░ рдЬрд▓реНрджреА рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, java.awt.List
рдореЗрдВ рдХреЛрдИ stream
рд╡рд┐рдзрд┐ рдирд╣реАрдВ stream
, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдХреБрдЫ рдЕрддрд┐рд░реЗрдХ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рд╣рдо рд▓рдВрдмреЛрджрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдИ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ, рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЕрднреА рднреА рдкреВрд░реНрдг PSI рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪреЗрдВрдЧреЗред
рд╡реИрд╢реНрд╡рд┐рдХ рдЦреЛрдЬ рдмрд╣реБрдд рдорд╣рдВрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬрдм рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ List
рд╡рд░реНрдЧ рд╣реЛрддреЗ рд╣реИрдВ), рдпрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣рд▓ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА (рдЬреИрд╕реЗ, рдпрд╣ рдПрдХ рдореВрд▓ рд╡рд░реНрдЧ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ), рдпрд╛ рдкрд╛рд╕ рдЪреЗрди рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реМрдЯрд╛рддреЗ рд╣реА рдЪреЗрди рдЯреВрдЯ рд╕рдХрддреА рд╣реИред рд╣рдо рд╣рд╛рд░ рдирд╣реАрдВ рдорд╛рдиреЗрдВрдЧреЗ рдФрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдЧрд▓реЗ рддрд░реАрдХреЗ рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, map.get(key).updateAndGet(a -> a * 2)
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ:
рдпрд╣ рд▓реИрдореНрдмреНрдбрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ updateAndGet
рд╡рд┐рдзрд┐ рдХреЗ рдПрдХрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде get
рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ Map
рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ Map
рдкреНрд░рдХрд╛рд░ рд╣реИ- java.util.Map
ред рдЗрд╕рдХреА рдПрдХ get(Object)
рд╡рд┐рдзрд┐ рд╣реИ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ V
рд▓реМрдЯрд╛рддрд╛ рд╣реИ V
рдлрд┐рд░ рд╣рдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ (рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде updateAndGet
рд╡рд┐рдзрд┐ рдХреА updateAndGet
ред рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ: AtomicInteger
, AtomicLong
, рдФрд░ AtomicReference
рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ IntUnaryOperator
, LongUnaryOperator
, рдФрд░ UnaryOperator
, рдХреНрд░рдорд╢рдГред рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдВрдмреЛрджрд░ рдЕрдиреБрд░реЛрдз рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ PSI рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, рдпрд╣ рдПрдХ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рддреАрди рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдврдиреЗ рдореЗрдВ IntelliJ IDEA рдХреЗ рд▓рд┐рдП рджрд╕ рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рддреАрди рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рди рдереА, рд▓реЗрдХрд┐рди рдЖрдИрдбреАрдИ рдиреЗ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдорд╢реАрди рдкрд░ рдХреЗрд╡рд▓ рджреЛ рд╕реЗрдХрдВрдб рдореЗрдВ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд┐рдПред рдФрд░ рдпрджреНрдпрдкрд┐ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╛рдБрдЪ рдкреНрд░рддрд┐рд╢рдд рдмрдврд╝реА рд╣реИред рдпрд╣ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдЖрдИрдбреАрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред
рдЬрдмрдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдЦреЛрдЬ рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рддреАрди рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реБрдЖ рдХрд░рддреА рдереАред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рддреАрди рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдЖрдкрдиреЗ рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ 8 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реМ рд▓рдВрдмреЛрджрд╛ рдерд╛ред рдЕрдм рддрдХ, рдЖрдкрдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рдЕрдирд╛рдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдзрд╛рд░рд╛рдУрдВ рдпрд╛ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╕реМ рд▓рдВрдмреЛрджрд░ рдХреЗ рдмрдЬрд╛рдп, рджрд╕ рд╣рдЬрд╛рд░ рд╣реИрдВред рдФрд░ рдЕрдм, рддреАрди рдЖрд╡рд╢реНрдпрдХ рд▓реЛрдЧреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдИрдбреАрдИ рдХреЛ рд╕реМ рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ "рд╣рдо" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕ рдЦреЛрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЧрддрд┐ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд▓рдзрд╛рд░рд╛ рдХреЛ рдКрдкрд░ рдЙрдард╛рдиреЗ рдХреА рддрд░рд╣ рд╣реИ, рдпрд╛ рдЭрд░рдиреЗ рдХреЛ рдКрдкрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд▓рдВрдмреЛрджрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдмрдврд╝ рд░рд╣реА рд╣реИред