рдЬрд╛рд╡рд╛ 11 рдиреЗ рдХреЛрдИ рднреА рдирд╡реАрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХрдИ рд░рддреНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╕реБрдиреЗ рд╣реЛрдВрдЧреЗред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА String
, Optional
, Collection
рдФрд░ рдЕрдиреНрдп рд╡рд░реНрдХрд╣реЙрд░реНрд╕ рдореЗрдВ рдирд╡реАрдирддрдо рдХреЛ рджреЗрдЦрд╛? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдк рдкрддреЗ рдкрд░ рдЖ рдЧрдП рд╣реИрдВ: рдЖрдЬ рд╣рдо рдЬрд╛рд╡рд╛ 11 рд╕реЗ 11 рдЫрд┐рдкреЗ рд╣реБрдП рд░рддреНрдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ!
рд▓реИрдореНрдмреНрдбрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдорд╛рди
рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
Function<String, String> append = string -> string + " "; Function<String, String> append = (String s) -> s + " ";
рдЬрд╛рд╡рд╛ 10 рдиреЗ var
рдкреЗрд╢ рдХрд┐рдпрд╛ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛:
рдЬрд╛рд╡рд╛ 11 рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ? рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ var
рдХреЗрд╡рд▓ рдПрдХ рдЯрд╛рдЗрдк рдкрд╛рд╕ рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ, var
рдЙрдкрдпреЛрдЧ рд╕реЗ рджреЛ рдорд╛рдореВрд▓реА рдлрд╛рдпрджреЗ рд╣реИрдВ:
- рдирд┐рдпрдо рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рд╣рдЯрд╛рдХрд░
var
рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдпрд╣рд╛рдБ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
List<EnterpriseGradeType<With, Generics>> types = ; types .stream()
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рдкрддреНрд░ рдХреЗ рд▓рдВрдмрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ (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()
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореВрд▓ рд▓рд╛рдЗрди \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();
'String::repeat'
рд╕рд╛рде рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд░
рд╡рд┐рдЪрд╛рд░ рдкрдХрдбрд╝реЗрдВ:
рдЪрд░рдг 1: JDK рдкрд░ рдирдЬрд░ рд░рдЦрдирд╛

рдЪрд░рдг 2: 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'
рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ?
рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк, 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 рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реВрдВ ...
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рдмрд╛рд░, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдФрд░ рдЗрд╕реЗ рдЙрд▓реНрдЯрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ), рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рдХ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдХреНрдпрд╛ рд▓рд╛рдпрд╛ рдЬрд╛рдП - рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк (String::isBlank).negate()
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдареАрдХ рдпрд╣реА рд╣реЛрддрд╛ рд╣реИ: рд╕рдВрдХрд▓рдХ рдЕрдм рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ String::isBlank
рдЗрд╕ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ String::isBlank
рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЬрд╛рддрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕ рдХреАрдордд рдкрд░?
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╕рд░рд▓ рдЙрдкрд╛рдп рд╣реИред negate
рдЖрд╡реГрддреНрддрд┐ negate
рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ 11 рд╕реЗ рдирдИ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ Predicate.not(Predicate<T>)
:
Stream .of("a", "b", "", "c")
рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░!
'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 рдХреЗ рд╕рд╛рде рдордЬрд╝реЗ рдХрд░реЛ!