рдЬрд╛рд╡рд╛ 11 рдХреЗ рдЧреНрдпрд╛рд░рд╣ рдЫрд┐рдкреЗ рд╣реБрдП рдореЛрддреА

рдЬрд╛рд╡рд╛ 11 рдиреЗ рдХреЛрдИ рднреА рдирд╡реАрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХрдИ рд░рддреНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╕реБрдиреЗ рд╣реЛрдВрдЧреЗред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА String , Optional , Collection рдФрд░ рдЕрдиреНрдп рд╡рд░реНрдХрд╣реЙрд░реНрд╕ рдореЗрдВ рдирд╡реАрдирддрдо рдХреЛ рджреЗрдЦрд╛? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдк рдкрддреЗ рдкрд░ рдЖ рдЧрдП рд╣реИрдВ: рдЖрдЬ рд╣рдо рдЬрд╛рд╡рд╛ 11 рд╕реЗ 11 рдЫрд┐рдкреЗ рд╣реБрдП рд░рддреНрдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ!


рд▓реИрдореНрдмреНрдбрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдорд╛рди


рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:


 Function<String, String> append = string -> string + " "; Function<String, String> append = (String s) -> s + " "; 

рдЬрд╛рд╡рд╛ 10 рдиреЗ var рдкреЗрд╢ рдХрд┐рдпрд╛ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛:


 //    Java 10 Function<String, String> append = (var string) -> string + " "; 

рдЬрд╛рд╡рд╛ 11 рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ? рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ var рдХреЗрд╡рд▓ рдПрдХ рдЯрд╛рдЗрдк рдкрд╛рд╕ рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ, var рдЙрдкрдпреЛрдЧ рд╕реЗ рджреЛ рдорд╛рдореВрд▓реА рдлрд╛рдпрджреЗ рд╣реИрдВ:


  • рдирд┐рдпрдо рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рд╣рдЯрд╛рдХрд░ var рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
  • рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

рдпрд╣рд╛рдБ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 List<EnterpriseGradeType<With, Generics>> types = /*...*/; types .stream() // ,     @Nonnull   .filter(type -> check(type)) //  Java 10    ~>  .filter((@Nonnull EnterpriseGradeType<With, Generics> type) -> check(type)) //  Java 11    ~>   .filter((@Nonnull var type) -> check(type)) 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рдкрддреНрд░ рдХреЗ рд▓рдВрдмрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ (var type, String option, index) -> ... рд╡реНрдпреБрддреНрдкрдиреНрди, рд╕реНрдкрд╖реНрдЯ рдФрд░ рдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ (var type, String option, index) -> ... рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ( JEP-323 рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ ) рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рддреАрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдирд╛ рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП var рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереЛрдбрд╝реА рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдо рддреМрд░ рдкрд░ рд╕рд╣рдиреАрдп рд╣реИред


'String::lines' рд╕рд╛рде 'String::lines' рдХреА рд╕реНрдЯреНрд░реАрдо рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ


рдПрдХ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд┐рд▓рд╛? рдЗрд╕рдХреЗ рд╣рд░ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдлрд┐рд░ String::lines рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИ:


 var multiline = "\r\n\r\n\r\n"; multiline .lines() //Stream<String> .map(line -> "// " + line) .forEach(System.out::println); // : //  //  //  //  

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореВрд▓ рд▓рд╛рдЗрди \r\n рд╕реНрдХреНрд░реВ рд╕реАрдорд╛рдВрдХрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдФрд░ рдпрджреНрдпрдкрд┐ рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╣реВрдВ, lines() рдиреЗ рдЕрднреА рднреА рдЗрд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐, рд╡рд░реНрддрдорд╛рди рдУрдПрд╕ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рд╡рд┐рдзрд┐ \r , \n , рдФрд░ \r\n рдХреЛ рдкрдВрдХреНрддрд┐ рд╡рд┐рдЪреНрдЫреЗрдж рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреА рд╣реИ - рднрд▓реЗ рд╣реА рд╡реЗ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдкрд░ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрдВред


рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ рдХрднреА рд▓рд╛рдЗрди рд╡рд┐рднрд╛рдЬрдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд▓рд╛рдЗрдиреЗрдВ рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ ( "\n\n \n\n" , рдЬрд┐рд╕рдореЗрдВ 5 рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдореВрд▓ рдкрдВрдХреНрддрд┐ рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╡рд╣ рдЦрд╛рд▓реА рд╣реИ ( "\n\n" ; 2 рд▓рд╛рдЗрдиреЗрдВ)ред (рдЕрдиреБрд╡рд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП line , рд▓реЗрдХрд┐рди string , рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛрдиреЛрдВ рд╣реИрдВ)ред


split("\R") рд╡рд┐рдкрд░реАрдд, lines() рдЖрд▓рд╕реА рд╣реИрдВ рдФрд░, рдореИрдВ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ , "рдирдИ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдХреЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ рдЦреЛрдЬ рдХрд░рдХреЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди [...] рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ"ред (рдпрджрд┐ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЬреЗрдПрдордПрдЪ рдкрд░ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ)ред рдпрд╣ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рднреА рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ (рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯреНрд░реАрдо) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


'String::strip' , рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдХреЛ рд╣рдЯрд╛рдирд╛ред


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, String рдореЗрдВ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ trim рд╡рд┐рдзрд┐ рдереА, рдЬрд┐рд╕реЗ U+0020 рддрдХ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред рд╣рд╛рдВ, BACKSPACE ( U+0008) BELL ( U+0007 ) рдХреА рддрд░рд╣ рд╕рдлреЗрдж рд╕реНрдерд╛рди рд╣реИ, рд▓реЗрдХрд┐рди LINE SEPARATOR ( U+2028 ) рдХреЛ рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЬрд╛рд╡рд╛ 11 рдиреЗ strip рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХреА, рдЬрд┐рд╕рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИрдВред рдпрд╣ рдЬрд╛рд╡рд╛ 5 рд╕реЗ Character::isWhitespace рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣:


  • SPACE SEPARATOR , LINE SEPARATOR , PARAGRAPH SEPARATOR , рд▓реЗрдХрд┐рди рдПрдХ рдЕрдкреНрд░рддрд┐рд╣рдд рд╕реНрдерд╛рди рдирд╣реАрдВ
  • HORIZONTAL TABULATION ( U+0009 ), LINE FEED ( U+000A ), U+000B ( U+000B ), FORM FEED ( U+000C ), U+000C ( U+000D )
  • FILE SEPARATOR ( U+001C ), GROUP SEPARATOR ( U+001D ), U+001D ( U+001E ), UNIT SEPARATOR ( U+001F )

рдПрдХ рд╣реА рддрд░реНрдХ рдХреЗ рд╕рд╛рде, рджреЛ рдФрд░ рд╕рдлрд╛рдИ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, stripLeading рдФрд░ stripTailing , рдЬреЛ рдХрд┐ рдЙрдирд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ isBlank рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд▓рд╛рдЗрди рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдмрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ isBlank :


 " ".isBlank(); //  ~> true " ".isBlank(); //   ~> false 

'String::repeat' рд╕рд╛рде рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд░


рд╡рд┐рдЪрд╛рд░ рдкрдХрдбрд╝реЗрдВ:


рдЪрд░рдг 1: JDK рдкрд░ рдирдЬрд░ рд░рдЦрдирд╛

JDK рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдХрдбрд╝реА рдирдЬрд╝рд░ рд░рдЦрдирд╛


рдЪрд░рдг 2: StackOverflow рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди рдвреВрдБрдврдирд╛

Stackoverflow рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ


рдЪрд░рдг 3: рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдП рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓рд╛

рдЖрдЧрд╛рдореА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде рдЭрдкрдЯреНрдЯрд╛


рдЪрд░рдг 4: ????

рдЪрд░рдг 4: рд▓рд╛рдн

┬п \ _ (уГД) _ / уГД


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, String рдореЗрдВ рдПрдХ рдирдпрд╛ repeat(int) рд╡рд┐рдзрд┐ рд╣реИред рдпрд╣ рдареАрдХ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╣реИред


'Path::of' рд╕рд╛рде рдкрде рдмрдирд╛рдирд╛


рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Path рдПрдкреАрдЖрдИ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЪрд╛рд░реЛрдВ (рдЬреИрд╕реЗ Path , File , URL , URI рдФрд░ String ) рдХреЗ рдмреАрдЪ рдкрде рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЕрднреА рднреА рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдХрд░ рдЬрд╛рд╡рд╛ 11 рдореЗрдВ рдпрд╣ рдмрд┐рдВрджреБ рдХрдо рднреНрд░рд╛рдордХ рд╣реЛ рдЧрдпрд╛ рд╣реИ Paths::get рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ Path::of Paths::get Path::of рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА


 Path tmp = Path.of("/home/nipa", "tmp"); Path codefx = Path.of(URI.create("http://codefx.org")); 

рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╣рд┐рдд рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдкреБрд░рд╛рдиреЗ Paths::get рддрд░реАрдХреЗ рдирдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


'Files::readString' рдФрд░ 'Files::writeString' рд╕рд╛рде рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛


рдпрджрд┐ рдореБрдЭреЗ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ Files::lines рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ Files::lines рдЗрд╕рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рдЖрд▓рд╕реА рдзрд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЗрдВред рдЗрд╕реА рддрд░рд╣, рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ Files::write рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ Files::write рдЙрдиреНрд╣реЗрдВ Iterable<String> рд░реВрдк рдореЗрдВ Files::write рд╣реБрдПред


рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдПрдХ рд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Files::readAllBytes рдФрд░ Files::readAllBytes рдХрд╛ рдЙрдкрдпреБрдХреНрдд рд╕рдВрд╕реНрдХрд░рдг Files::write рдмрд╛рдЗрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдХрд╛рд░реНрдп Files::write рд╣реИрдВред


рдФрд░ рдлрд┐рд░ Java 11 рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ readString рдФрд░ readString рдЬреЛрдбрд╝рддреЗ readString Files :


 String haiku = Files.readString(Path.of("haiku.txt")); String modified = modify(haiku); Files.writeString(Path.of("haiku-mod.txt"), modified); 

рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк Charset рдХреЛ readString рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ readString рдореЗрдВ рдПрдХ OpenOptions рд╕рд░рдгреА рднреАред


рдЦрд╛рд▓реА I / O 'Reader::nullReader' , рдЖрджрд┐ рдХреЗ рд╕рд╛рдеред


рдПрдХ OutputStream рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ? рдпрд╛ рдПрдХ рдЦрд╛рд▓реА InputStream ? Reader рдФрд░ Writer рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ? рдЬрд╛рд╡рд╛ 11 рдореЗрдВ рдпрд╣ рд╕рдм рд╣реИ:


 InputStream input = InputStream.nullInputStream(); OutputStream output = OutputStream.nullOutputStream(); Reader reader = Reader.nullReader(); Writer writer = Writer.nullWriter(); 

(рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ: commons-io рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ рд▓рдЧрднрдЧ 2014 рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВред)


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ - рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╕рд░реНрдЧ null ? рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЬрд╛рдирдмреВрдЭрдХрд░ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐" рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ... рд╢рд╛рдпрдж рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ noOp рдХрд╛ рдЙрдкрдпреЛрдЧ noOp ? (рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ: рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рдЙрдкрд╕рд░реНрдЧ /dev/null рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред)


{ } ~> [ ] 'Collection::toArray' рд╕рд╛рде 'Collection::toArray'


рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ?


 //  Java 11 List<String> list = /*...*/; Object[] objects = list.toArray(); String[] strings_0 = list.toArray(new String[0]); String[] strings_size = list.toArray(new String[list.size()]); 

рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк, objects , рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдбрд╝рд╛рди рдореЗрдВ рд╣реИред рдмрд╛рдХреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рджреЛрдиреЛрдВ рднрд╛рд░реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдХрдо рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рджрд┐рдЦреЗ (рдЕрд░реНрдерд╛рдд, рдпрд╣ "рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд▓рдЧрддрд╛ рд╣реИ", рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рджреЗрдЦреЗрдВ)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд╣реИ? рдирд╣реАрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдзреАрдорд╛ (рдлрд┐рд▓рд╣рд╛рд▓) рд╣реИред


рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХреНрдпреЛрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ? рдЬрд╛рд╡рд╛ 11 рдореЗрдВ рд╣реИрдВ:


 String[] strings_fun = list.toArray(String[]::new); 

Collection::toArray рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг Collection::toArray IntFunction<T[]> Collection::toArray , рдЬреЛ IntFunction<T[]> , рдЕрд░реНрдерд╛рддреН рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ T[]::new (рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз T ) рдХреЗ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп, Collection#toArray(IntFunction<T[]>) рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдореЗрд╢рд╛ рд╕рд░рдгреА рдЬрдирд░реЗрдЯрд░ рдХреЛ 0 рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП, рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ Collection рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЧреНрд░рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬреИрд╕реЗ рдХрд┐ ArrayList , рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЬрд╛рд╡рд╛ 11 рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред


'Optional::isEmpty' рд╕рд╛рде рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ


Optional рдХреЗ рдкреНрд░рдЪреБрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдЬрд╣рд╛рдВ рдЖрдк рдЕрдХреНрд╕рд░ рдЧреИрд░- Optional рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдореВрд▓реНрдп рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ Optional::isPresent ред рд╡рд┐рдзрд┐ рд╡рд┐рдзрд┐ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдХреНрд╕рд░ рдЖрдк рд╡рд┐рдкрд░реАрдд рдкрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ - рдХрд┐ Optional рдЦрд╛рд▓реА рд╣реИред рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ, рдмрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ !opt.isPresent() , рдареАрдХ рд╣реИ?


рдмреЗрд╢рдХ, рдпрд╣ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди if рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдЙрд▓рдЯреА рдирд╣реАрдВ рд╣реИ if рддрд░реНрдХ рдХреЛ рд╕рдордЭрдирд╛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдХрднреА-рдХрднреА Optional рдХреЙрд▓ рдХреА рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреЙрдк рдЕрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╢рд░реНрдд рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ ! рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ:


 public boolean needsToCompleteAddress(User user) { return !getAddressRepository() .findAddressFor(user) .map(this::canonicalize) .filter(Address::isComplete) .isPresent(); } 

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕реЗ рдЫреЛрдбрд╝реЗрдВ ! рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЬрд╛рд╡рд╛ 11 рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ:


 public boolean needsToCompleteAddress(User user) { return getAddressRepository() .findAddressFor(user) .map(this::canonicalize) .filter(Address::isComplete) .isEmpty(); } 

Inverting 'Predicate::not' рд╕рд╛рде 'Predicate::not'


Inverting рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ ... Predicate рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ negate рдЖрд╡реГрддреНрддрд┐ negate : рдпрд╣ рдПрдХ рдирдпрд╛ predicate рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реВрдВ ...


 //      Stream .of("a", "b", "", "c") // ,  ~>        .filter(s -> !s.isBlank()) //          ~>  .filter((String::isBlank).negate()) // ,  ~>       .filter(((Predicate<String>) String::isBlank).negate()) .forEach(System.out::println); 

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рдмрд╛рд░, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдФрд░ рдЗрд╕реЗ рдЙрд▓реНрдЯрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ), рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рдХ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдХреНрдпрд╛ рд▓рд╛рдпрд╛ рдЬрд╛рдП - рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк (String::isBlank).negate() рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдареАрдХ рдпрд╣реА рд╣реЛрддрд╛ рд╣реИ: рд╕рдВрдХрд▓рдХ рдЕрдм рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ String::isBlank рдЗрд╕ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ String::isBlank рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЬрд╛рддрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕ рдХреАрдордд рдкрд░?


рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╕рд░рд▓ рдЙрдкрд╛рдп рд╣реИред negate рдЖрд╡реГрддреНрддрд┐ negate рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ 11 рд╕реЗ рдирдИ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ Predicate.not(Predicate<T>) :


 Stream .of("a", "b", "", "c") //   `java.util.function.Predicate.not` .filter(not(String::isBlank)) .forEach(System.out::println); 

рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░!


'Pattern::asMatchPredicate' рд╕рд╛рде рд╡рд┐рдзреЗрдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐


рдХреНрдпрд╛ рдХреЛрдИ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ? рдЙрд╕ рдкрд░ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ:


 Pattern nonWordCharacter = Pattern.compile("\\W"); Stream .of("Metallica", "Mot├╢rhead") .filter(nonWordCharacter.asPredicate()) .forEach(System.out::println); 

рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдзрд┐ рдкрд╛рдХрд░ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реБрдИ! рдпрд╣ рдЬреЛрдбрд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛ 8 рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдЙрдлрд╝, рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ред рдЬрд╛рд╡рд╛ 11 рдиреЗ рдПрдХ рдФрд░ рд╕рдорд╛рди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА: Pattern::asMatchPredicate ред рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?


  • asPredicate рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ s -> this.matcher(s).find() )ред
  • asMatchPredicate рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ ( s -> this.matcher(s).matches() рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИ)

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рдлреЛрди рдирдВрдмрд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ ^ рдФрд░ $ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 prospectivePhoneNumbers .stream() .filter(phoneNumberPatter.asPredicate()) .forEach(this::robocall); 

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рдЧрд▓рддреА рдирдЬрд╝рд░ рдЖрдИ? " -152 ? +1-202-456-1414" рдЬреИрд╕реА рдПрдХ рд▓рд╛рдЗрди рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░реНрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдорд╛рдиреНрдп рдлрд╝реЛрди рдирдВрдмрд░ рд╣реИред рджреВрд╕рд░реА рдУрд░, Pattern::asMatchPredicate рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдкреВрд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдм рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдЧреАред


рдЖрддреНрдо рдкрд░реАрдХреНрд╖рдг


рдпрд╣рд╛рдБ рд╕рднреА рдЧреНрдпрд╛рд░рд╣ рдореЛрддрд┐рдпреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рд╣реИ - рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдпрд╛рдж рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЖрдкрдиреЗ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░ рд▓реА рд╣реИред


  • String :
    • Stream<String> lines()
    • String strip()
    • String stripLeading()
    • String stripTrailing()
    • boolean isBlank()
    • String repeat(int)
  • Path :
    • static Path of(String, String...)
    • static Path of(URI)
  • Files :
    • String readString(Path) throws IOException
    • Path writeString(Path, CharSequence, OpenOption...) throws IOException
    • Path writeString(Path, CharSequence, Charset, OpenOption...) throws IOException
  • InputStream : static InputStream nullInputStream()
  • static OutputStream nullOutputStream() : static OutputStream nullOutputStream()
  • Reader : static Reader nullReader()
  • Writer : static Writer nullWriter()
  • Collection : T[] toArray(IntFunction<T[]>)
  • Optional : boolean isEmpty()
  • Predicate : static Predicate<T> not(Predicate<T>)
  • Pattern : Predicate<String> asMatchPredicate()

рдЬрд╛рд╡рд╛ 11 рдХреЗ рд╕рд╛рде рдордЬрд╝реЗ рдХрд░реЛ!

Source: https://habr.com/ru/post/hi441154/


All Articles