VAVR (рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ Javaslang рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЬрд╛рд╡рд╛ 8+ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рд▓рд╛рднрдХрд╛рд░реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕реНрдХрд╛рд▓рд╛ рдЬреИрд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред 
рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд▓ ред
рдХрдЯ рдХреЗ рддрд╣рдд 
рд╡рд╛рд╡рд░ рдХрд▓реЗрдХреНрд╢рдВрд╕ рдПрдкреАрдЖрдИ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИред
@Middle_java рджреНрд╡рд╛рд░рд╛ 
рдЕрдиреБрд╡рд╛рджрд┐рддрдЕрдВрддрд┐рдо рд╕рдВрд╢реЛрдзрд┐рдд рдореВрд▓ рд▓реЗрдЦ: 15 рдЕрдЧрд╕реНрдд, 2019
1. рдЕрд╡рд▓реЛрдХрди
Vavr рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ Javaslang рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕рдХреЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдВрдЧреНрд░рд╣ рдПрдкреАрдЖрдИ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ 
рд▓рд┐рдП рдпрд╣ рд▓реЗрдЦ рджреЗрдЦреЗрдВред
2. рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдЧреНрд░рд╣
рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрдЧреНрд░рд╣, рдЬрдм рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИред
рдПрдХ рд╣реА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди CPU рдФрд░ рд╕реНрдореГрддрд┐ рдХреЗ рдЕрдХреНрд╖рдо рдЙрдкрдпреЛрдЧ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╡рд░ рд╕рдВрдЧреНрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдХреЗ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдЬрд╛рд╡рд╛ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХреНрд▓рд╛рд╕ 
Collections рд╕реЗ 
unmodifiableCollection() рд╕реЗ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдЬреЛ рдмрд╕ рдмреЗрд╕ рдХрд▓реЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп 
UnsupportedOperationException ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдзрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрднреА рднреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИред
3. рдЯреНрд░реИрд╡рд░реНрд╕реЗрдмрд▓
Traversable рд╕рднреА рд╡рд╡рд░ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ 
size() , 
get() , 
filter() , 
isEmpty() рдФрд░ рдЕрдиреНрдп рдЬреЛ рд╕рдм-рдЗрдВрдЯрд░рдлреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред
рд╣рдо рдЖрдЧреЗ рд╕рдВрдЧреНрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред
4. рд╕реАрдХ
рдЪрд▓рд┐рдП рд╕реАрдХреНрд╡реЗрдВрд╕ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВред
Seq рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдпрд╣ 
List , 
Stream , 
Queue , 
Array , 
Vector рдФрд░ 
CharSeq рд▓рд┐рдП рдореВрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдЗрди рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреБрдг рд╣реИрдВ, рдЬрд┐рдирдХреА рд╣рдо рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред
4.1ред рд╕реВрдЪреА
List рдПрдХ рдКрд░реНрдЬрд╛рд╡рд╛рди рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ (рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣реА рдЗрд╕рдХреЗ рдСрдкрд░реЗрдВрдб рдХреЗ рдорд╛рди рдЬреНрдЮрд╛рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ) рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рдЬреЛ 
LinearSeq рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рд▓рдЧрд╛рддрд╛рд░ 
List рдирд┐рд░реНрдорд╛рдг 
рдкреНрд░рдореБрдЦ рдФрд░ 
рдкреВрдВрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рд╕рд┐рд░ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╣реИ
- рдкреВрдВрдЫ - рд╢реЗрд╖ рддрддреНрд╡реЛрдВ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рд╕реВрдЪреА (рдпрд╣ рд╕реВрдЪреА рднреА рд╕рд┐рд░ рдФрд░ рдкреВрдВрдЫ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ)
List API рдореЗрдВ рд╕реНрдерд┐рд░ рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк 
List рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ 
List рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 
of() рд╡рд┐рдзрд┐ рдХреЗ рд╕реНрдереИрддрд┐рдХ 
of() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк рдПрдХ рдЦрд╛рд▓реА 
List рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ 
empty() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА 
List рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд┐рдзрд┐ 
ofAll() рд╡рд┐рдзрд┐:
 List < String > list = List.of( "Java", "PHP", "Jquery", "JavaScript", "JShell", "JAVA"); 
рдЖрдЗрдП рд╕реВрдЪреА рд╣реЗрд░рдлреЗрд░ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред
рд╣рдо рдкрд╣рд▓реЗ 
N рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП 
drop() рд╡рд┐рдзрд┐ рдФрд░ рдЗрд╕рдХреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 List list1 = list.drop(2); assertFalse(list1.contains("Java") && list1.contains("PHP")); List list2 = list.dropRight(2); assertFalse(list2.contains("JAVA") && list2.contains("JShell")); List list3 = list.dropUntil(s - > s.contains("Shell")); assertEquals(list3.size(), 2); List list4 = list.dropWhile(s - > s.length() > 0); assertTrue(list4.isEmpty()); 
drop(int n) рд╕реВрдЪреА рд╕реЗ 
n рдЖрдЗрдЯрдо рд╣рдЯрд╛рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ 
dropRight() рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ, рд╕реВрдЪреА рдореЗрдВ рдЕрдВрддрд┐рдо рдЖрдЗрдЯрдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
dropUntil() рд╕реВрдЪреА рд╕реЗ рдЖрдЗрдЯрдо рд╣рдЯрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рдзреЗрдп 
true , рдЬрдмрдХрд┐ 
dropWhile() рдЖрдЗрдЯрдо рд╣рдЯрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рдзреЗрдп 
true ред
dropRightWhile() рдФрд░ 
dropRightUntil() рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рд╣реИрдВ рдЬреЛ рджрд╛рдИрдВ рдУрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ 
dropRightUntil() ред
рдЕрдЧрд▓рд╛, рд╕реВрдЪреА рд╕реЗ рдЖрдЗрдЯрдо рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ 
take(int n) рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реВрдЪреА рд╕реЗ 
n рдЖрдЗрдЯрдо рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ 
takeRight(int n) , рдЬреЛ рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рд╕реЗ рддрддреНрд╡ рд▓реЗрддрд╛ рд╣реИ:
 List list5 = list.take(1); assertEquals(list5.single(), "Java"); List list6 = list.takeRight(1); assertEquals(list5.single(), "Java"); List list7 = list.takeUntil(s - > s.length() > 6); assertEquals(list3.size(), 3); 
рдЕрдВрдд рдореЗрдВ, 
takeUntil() рд╕реВрдЪреА рд╕реЗ рддрддреНрд╡ рд▓реЗрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рдзреЗрдп 
true рд╣реЛ рдЬрд╛рддрд╛ред 
takeWhile() рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рдзреЗрдп рддрд░реНрдХ рднреА рд▓реЗрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреАрдЖрдИ рдореЗрдВ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 
distinct() , рдЬреЛ рд╣рдЯрд╛рдП рдЧрдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд╕рд╛рде рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ, рдФрд░ 
distinctBy() , рдЬреЛ рд╕рдорд╛рдирддрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 
Comparator рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ 
intersperse() рднреА рд╣реИ, рдЬреЛ рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рдмреАрдЪ рдПрдХ рддрддреНрд╡ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред 
String рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
 List list8 = list .distinctBy((s1, s2) - > s1.startsWith(s2.charAt(0) + "") ? 0 : 1); assertEquals(list3.size(), 2); String words = List.of("Boys", "Girls") .intersperse("and") .reduce((s1, s2) - > s1.concat(" " + s2)) .trim(); assertEquals(words, "Boys and Girls"); 
рд╕реВрдЪреА рдХреЛ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ:
 Iterator < List < String >> iterator = list.grouped(2); assertEquals(iterator.head().size(), 2); Map < Boolean, List < String >> map = list.groupBy(e - > e.startsWith("J")); assertEquals(map.size(), 2); assertEquals(map.get(false).get().size(), 1); assertEquals(map.get(true).get().size(), 5); 
group(int n) рд╡рд┐рдзрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ 
List рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреА рд╣реИред 
groupdBy() рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ 
Function рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реВрдЪреА рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреЛ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ 
Map рджреЗрддрд╛ рд╣реИ: 
true рдФрд░ 
false ред
true рдХреБрдВрдЬреА рдХреЛ 
Function рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА 
List рдкрд░ рдореИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрди рддрддреНрд╡реЛрдВ рдХреА 
List false рдкреНрд░рдореБрдЦ рдирдХреНрд╢реЗ рдЬреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, 
List рдмрджрд▓рддреЗ рд╕рдордп, рдореВрд▓ 
List рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, 
List рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣рдореЗрд╢рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рд╕реНрдЯреИрдХ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 
List рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - "рдЕрдВрддрд┐рдо, рдкрд╣рд▓реЗ рдмрд╛рд╣рд░" рд╕рд┐рджреНрдзрд╛рдВрдд (LIFO) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рд╡рд╛рд▓реЗред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреИрд╕реЗ рдХрд┐ 
peek() , 
pop() рдФрд░ 
push() рд╕реНрдЯреИрдХ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВ:
 List < Integer > intList = List.empty(); List < Integer > intList1 = intList.pushAll(List.rangeClosed(5, 10)); assertEquals(intList1.peek(), Integer.valueOf(10)); List intList2 = intList1.pop(); assertEquals(intList2.size(), (intList1.size() - 1)); 
рд╕реНрдЯреИрдХ рдкрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 
pushAll() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреИрдХ рдХреЗ рдореБрдЦреНрдп рддрддреНрд╡ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 
peek() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ 
peekOption() рд╡рд┐рдзрд┐ рднреА рд╣реИ рдЬреЛ 
Option рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреА рд╣реИред
List рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЕрдиреНрдп рд░реЛрдЪрдХ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ 
рдЬрд╛рд╡рд╛ рдбреЙрдХреНрд╕ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИрдВред
4.2ред рдХрддрд╛рд░
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп 
Queue рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдлреАрдлреЛ рд╕рд┐рджреНрдзрд╛рдВрдд (рдкрд╣рд▓реА рдмрд╛рд░, рдкрд╣рд▓реЗ рдмрд╛рд╣рд░) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрджрд░ 
Queue рдореЗрдВ рджреЛ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ: рд╕рд╛рдордиреЗ рдХреА 
List рдФрд░ рдкреАрдЫреЗ рдХреА 
List ред рд╕рд╛рдордиреЗ рдХреА 
List рдореЗрдВ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛рдП рдЧрдП рдЖрдЗрдЯрдо рд╣реИрдВ, рдФрд░ рдкреАрдЫреЗ рдХреА 
List рдореЗрдВ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдЖрдЗрдЯрдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрд╣ рдЖрдкрдХреЛ рдХрддрд╛рд░рдмрджреНрдзрддрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ 
рдУ (1) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред рдЬрдм 
List рд╕рд╛рдордиреЗ рдХреА 
List рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рдЗрд╕реЗ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреАрдЫреЗ рдХреА 
List рдЙрд▓рдЯ рдЬрд╛рддреА рд╣реИ рдФрд░ рдирдИ рд╕рд╛рдордиреЗ 
List рдмрди рдЬрд╛рддреА рд╣реИред
рдЖрдЗрдП рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рдПрдБ:
 Queue < Integer > queue = Queue.of(1, 2); Queue < Integer > secondQueue = queue.enqueueAll(List.of(4, 5)); assertEquals(3, queue.size()); assertEquals(5, secondQueue.size()); Tuple2 < Integer, Queue < Integer >> result = secondQueue.dequeue(); assertEquals(Integer.valueOf(1), result._1); Queue < Integer > tailQueue = result._2; assertFalse(tailQueue.contains(secondQueue.get(0))); 
dequeue() рдлрд╝рдВрдХреНрд╢рди 
Queue рд╕реЗ рд╣реЗрдб рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ 
Tuple2<T, Q> рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЯрдкрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореБрдЦреНрдп рддрддреНрд╡ рд╣реИ, рдЯреБрдкрд▓ рдХрд╛ рджреВрд╕рд░рд╛ рддрддреНрд╡ рд╢реЗрд╖ 
Queue рддрддреНрд╡ рд╣реИред
рд╣рдо 
Queue рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд 
N рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 
combination(n) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 Queue < Queue < Integer >> queue1 = queue.combinations(2); assertEquals(queue1.get(2).toCharSeq(), CharSeq.of("23")); 
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, 
Queue рд╕реЗ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдореВрд▓ 
Queue рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИред
4.3ред рдзрд╛рд░рд╛
Stream рдПрдХ lazily рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ 
java.util.stream рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИред Java.util.stream рдХреЗ рд╡рд┐рдкрд░реАрдд, 
Stream Vavr рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд▓рд╕реА рдмрд╛рдж рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 
Stream рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрдВ:
 Stream < Integer > s = Stream.of(2, 1, 3, 4); 
рдХрдВрд╕реЛрд▓ рдореЗрдВ 
s.toString() рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордп, рдХреЗрд╡рд▓ 
рд╕реНрдЯреНрд░реАрдо (2,?) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ 
Stream рд╣реЗрдб рддрддреНрд╡ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереА, рдЬрдмрдХрд┐ рдкреВрдВрдЫ рддрддреНрд╡ рдирд╣реАрдВ рдереЗред
s.get(3) рдХреЙрд▓ 
s.get(3) рдФрд░ рдлрд┐рд░ 
s.tail() рд░рд┐рдЯрд░реНрди 
рд╕реНрдЯреНрд░реАрдо (1, 3, 4 ,?) рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рдЖрдк 
s.get(3) рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдЬреЛ 
Stream рдХреЛ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ - рдХреЗрд╡рд▓ 
рд╕реНрдЯреНрд░реАрдо (1 ,?) s.tail() ) рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдкреВрдВрдЫ рддрддреНрд╡ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереАред
рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ 
Stream рдХреЛ рдЙрди рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ (рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ) рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╣реЛрддреЗ рд╣реИрдВред
рд╡рд╛рд╡рд░ рдореЗрдВ 
Stream рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ рдФрд░ 
Empty рдпрд╛ 
Cons рд╣реЛ рд╕рдХрддрд╛ рд╣реИред 
Cons рдореЗрдВ рд╕рд┐рд░ рддрддреНрд╡ рдФрд░ 
Stream рдХреА рдЖрд▓рд╕реА рдЧрдгрдирд╛ рдХреА рдкреВрдВрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИред 
List рд╡рд┐рдкрд░реАрдд, 
Stream рдореБрдЦреНрдп рддрддреНрд╡ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЯреЗрд▓ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИред
рдЖрдЗрдП 10 рдзрдирд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рдПрдХ 
Stream рдмрдирд╛рдПрдВ рдФрд░ рд╕рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдпреЛрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ:
 Stream < Integer > intStream = Stream.iterate(0, i - > i + 1) .take(10); assertEquals(10, intStream.size()); long evenSum = intStream.filter(i - > i % 2 == 0) .sum() .longValue(); assertEquals(20, evenSum); 
Java 8 рд╕реЗ 
Stream рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рдкрд░реАрдд, Vavr рдореЗрдВ 
Stream рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдЕрдкрдиреЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ 
get() рдЬреИрд╕реЗ 
get() , 
append() , 
insert() рдФрд░ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред 
drop() , 
distinct() рдФрд░ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП 
Stream рдореЗрдВ 
tabulate() рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рдпрд╣ рд╡рд┐рдзрд┐ рд▓рдВрдмрд╛рдИ 
n рдпреБрдХреНрдд рддрддреНрд╡реЛрдВ 
Stream рдПрдХ 
Stream рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
 Stream < Integer > s1 = Stream.tabulate(5, (i) - > i + 1); assertEquals(s1.get(2).intValue(), 3); 
рд╣рдо 
Tuple2<Integer, Integer> рд╕реЗ рдПрдХ 
Stream рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 
zip() рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ 
Stream рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
 Stream < Integer > s = Stream.of(2, 1, 3, 4); Stream < Tuple2 < Integer, Integer >> s2 = s.zip(List.of(7, 8, 9)); Tuple2 < Integer, Integer > t1 = s2.get(0); assertEquals(t1._1().intValue(), 2); assertEquals(t1._2().intValue(), 7); 
4.4ред рд╕рд░рдгреА
Array рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЕрдиреБрдХреНрд░рдорд┐рдд рдЕрдиреБрдХреНрд░рдо рд╣реИ рдЬреЛ рдХреБрд╢рд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрднрд┐рдЧрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╕реНрддреБрдУрдВ 
рдХреА рдПрдХ рдЬрд╛рд╡рд╛ 
рд╕рд░рдгреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдЯрд╛рдЗрдк 
T рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ 
Traversable рд░реИрдкрд░ рд╣реИ 
TрдЖрдк 
of() рд╡рд┐рдзрд┐ рдХреЗ рд╕реНрдерд┐рд░ 
of() рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 
Array рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕реНрдЯреЗрдЯрд┐рдХ рдореЗрдердбреНрд╕ 
range() рдФрд░ 
rangeBy() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред 
rangeBy() рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрджрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
range() рдФрд░ 
rangeBy() рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛, рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд╕реЗ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдореЗрдВ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо 
rangeClosed() рдпрд╛ 
rangeClosedBy() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 Array < Integer > rArray = Array.range(1, 5); assertFalse(rArray.contains(5)); Array < Integer > rArray2 = Array.rangeClosed(1, 5); assertTrue(rArray2.contains(5)); Array < Integer > rArray3 = Array.rangeClosedBy(1, 6, 2); assertEquals(list3.size(), 3); 
рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
 Array < Integer > intArray = Array.of(1, 2, 3); Array < Integer > newArray = intArray.removeAt(1); assertEquals(3, intArray.size()); assertEquals(2, newArray.size()); assertEquals(3, newArray.get(1).intValue()); Array < Integer > array2 = intArray.replace(1, 5); assertEquals(s1.get(0).intValue(), 5); 
4.5ред рд╡реЗрдХреНрдЯрд░
Vector Array рдФрд░ 
List рдмреАрдЪ рдПрдХ рдХреНрд░реЙрд╕ рд╣реИ, рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдЕрдиреБрдХреНрд░рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд░рдВрддрд░ рд╕рдордп рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрднрд┐рдЧрдо рдФрд░ рд╕рдВрд╢реЛрдзрди рджреЛрдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 Vector < Integer > intVector = Vector.range(1, 5); Vector < Integer > newVector = intVector.replace(2, 6); assertEquals(4, intVector.size()); assertEquals(4, newVector.size()); assertEquals(2, intVector.get(1).intValue()); assertEquals(6, newVector.get(1).intValue()); 
4.6ред CharSeq
CharSeq рдЖрджрд┐рдо рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╡рд╕реНрддреБ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд 
String рд▓рд┐рдП рдпрд╣ рдПрдХ рдЖрд╡рд░рдг рд╣реИред
CharSeq рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред
 CharSeq chars = CharSeq.of("vavr"); CharSeq newChars = chars.replace('v', 'V'); assertEquals(4, chars.size()); assertEquals(4, newChars.size()); assertEquals('v', chars.charAt(0)); assertEquals('V', newChars.charAt(0)); assertEquals("Vavr", newChars.mkString()); 
5. рд╕реЗрдЯ рдХрд░реЗрдВ
рдпрд╣ рдЦрдВрдб рд╕рдВрдЧреНрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ 
Set рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред 
Set рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдПрдХ рдЕрдиреВрдареА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
Set рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред рдореБрдЦреНрдп рдПрдХ 
HashSet ред 
TreeSet рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред 
LinkedHashSet рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдореНрдорд┐рд▓рди рдХреНрд░рдо рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
5.1ред HashSet
рдирдП рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 
HashSet рдореЗрдВ рд╕реНрдерд┐рд░ рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг 
of() , 
ofAll() рдФрд░ 
range() рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рднрд┐рдиреНрдирддрд╛рдПрдВред
diff() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ 
рд╕реЗрдЯ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 
union() рдФрд░ 
intersect() рддрд░реАрдХреЗ рд╕рдВрдШ рдФрд░ рджреЛ 
рд╕реЗрдЯ рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ:
 HashSet < Integer > set0 = HashSet.rangeClosed(1, 5); HashSet < Integer > set0 = HashSet.rangeClosed(1, 5); assertEquals(set0.union(set1), HashSet.rangeClosed(1, 6)); assertEquals(set0.diff(set1), HashSet.rangeClosed(1, 2)); assertEquals(set0.intersect(set1), HashSet.rangeClosed(3, 5)); 
рд╣рдо рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛:
 HashSet < String > set = HashSet.of("Red", "Green", "Blue"); HashSet < String > newSet = set.add("Yellow"); assertEquals(3, set.size()); assertEquals(4, newSet.size()); assertTrue(newSet.contains("Yellow")); 
HashSet рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди 
рд╣реИрд╢ рд╕рд░рдгреА рдореИрдкреЗрдб рдЯреНрд░рд╛рдЗ (рдПрдЪрдПрдПрдордЯреА) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдирд┐рдпрдорд┐рдд 
рд╣реИрд╢рдЯреЗрдмрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдмрдирд╛рддреА рд╣реИред
5.2ред TreeSet
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп 
SortedSet рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рднреА рдСрдкрд░реЗрд╢рди 
рдУ (рд▓реЙрдЧ рдПрди) рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, 
TreeSet рддрддреНрд╡реЛрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕реЙрд░реНрдЯ рдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ 
SortedSet рдмрдирд╛рдПрдВ:
 SortedSet < String > set = TreeSet.of("Red", "Green", "Blue"); assertEquals("Blue", set.head()); SortedSet < Integer > intSet = TreeSet.of(1, 2, 3); assertEquals(2, intSet.average().get().intValue()); 
рдХрд╕реНрдЯрдо рддрд░реАрдХреЗ рд╕реЗ рдЖрдЗрдЯрдо рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 
TreeSet рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ 
Comparator рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд╛рд╕ рдХрд░реЗрдВред рдЖрдк рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 SortedSet < String > reversedSet = TreeSet.of(Comparator.reverseOrder(), "Green", "Red", "Blue"); assertEquals("Red", reversedSet.head()); String str = reversedSet.mkString(" and "); assertEquals("Red and Green and Blue", str); 
5.3ред BitSet
Vavr рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп 
BitSet рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИред 
BitSet рдЗрдВрдЯрд░рдлрд╝реЗрд╕ 
BitSet рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред 
BitSet рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 
BitSet рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Set рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде, 
BitSet рдЖрдкрдХреЛ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдпрд╣ 
Traversable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдорд╛рдирдХ рдЬрд╛рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ 
java.util.BitSet рд╕реЗ рдЕрд▓рдЧ рд╣реИред 
BitSet рдбреЗрдЯрд╛ рдореЗрдВ 
String рдорд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред
of() рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐ 
of() рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 
BitSet рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 BitSet < Integer > bitSet = BitSet.of(1, 2, 3, 4, 5, 6, 7, 8); BitSet < Integer > bitSet1 = bitSet.takeUntil(i - > i > 4); assertEquals(list3.size(), 4); 
рдкрд╣рд▓реЗ рдЪрд╛рд░ 
BitSet рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 
BitSet рд╣рдордиреЗ 
takeUntil() рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдСрдкрд░реЗрд╢рди рдиреЗ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рдпрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ 
takeUntil() рд╡рд┐рдзрд┐ 
Traversable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ, рдЬреЛ 
BitSet рд▓рд┐рдП рдореВрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
Traversable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдиреНрдп рддрд░реАрдХреЗ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рднреА 
BitSet рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
6. рдирдХреНрд╢рд╛
Map рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИред Vavr рдореЗрдВ 
Map рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ 
HashMap , 
TreeMap рдФрд░ 
LinkedHashMap ред
рдЖрдорддреМрд░ рдкрд░, 
рдорд╛рдирдЪрд┐рддреНрд░ рдЕрдиреБрдмрдВрдз рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
6.1ред HashMap
HashMap рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп 
Map рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рдХреБрдВрдЬреА рдХреЗ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
Vavr рдореЗрдВ 
Map рдкрд╛рд░рдВрдкрд░рд┐рдХ 
Entry рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Tuple2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
 Map < Integer, List < Integer >> map = List.rangeClosed(0, 10) .groupBy(i - > i % 2); assertEquals(2, map.size()); assertEquals(6, map.get(0).get().size()); assertEquals(5, map.get(1).get().size()); 
рд╣реИрд╢рд╕реЗрдЯ рдХреА рддрд░рд╣ , 
рд╣реИрд╢рдкреЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди 
рд╣реИрд╢ рдПрд░реЗ рдореИрдкреНрдб рдЯреНрд░рд╛рдЗ (рдПрдЪрдПрдПрдордЯреА) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рд▓рдЧрднрдЧ рд╕рднреА рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рд╕рдордп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред
рдлрд╝рд┐рд▓реНрдЯрд░ рддрддреНрд╡реЛрдВ рдХреЛ 
filterKeys() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ 
filterKeys() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ 
Predicate :
 Map < String, String > map1 = HashMap.of("key1", "val1", "key2", "val2", "key3", "val3"); Map < String, String > fMap = map1.filterKeys(k - > k.contains("1") || k.contains("2")); assertFalse(fMap.containsKey("key3")); Map < String, String > map1 = map1.filterValues(v - > v.contains("3")); assertEquals(list3.size(), 1); assertTrue(fMap2.containsValue("val3")); 
рдЖрдк 
map() рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 
рдорд╛рдирдЪрд┐рддреНрд░ рддрддреНрд╡реЛрдВ рдХреЛ рднреА рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо 
map1 рдХреЛ 
Map<String, Integer> рдмрджрд▓реЗрдВ :
 Map < String, Integer > map2 = map1.map( (k, v) - > Tuple.of(k, Integer.valueOf(v.charAt(v.length() - 1) + ""))); assertEquals(map2.get("key1").get().intValue(), 1); 
6.2ред рдЯреНрд░реА-рдореИрдк
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп 
TreeMap SortedMap рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред 
TreeSet рд╕рд╛рде, 
TreeMap рддрддреНрд╡реЛрдВ рдХреЗ рдЫрдВрдЯрд╛рдИ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 
TreeSet рдПрдХ рдХрд╕реНрдЯрдо рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
SortedMap рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 SortedMap < Integer, String > map = TreeMap.of(3, "Three", 2, "Two", 4, "Four", 1, "One"); assertEquals(1, map.keySet().toJavaArray()[0]); assertEquals("Four", map.get(4).get()); 
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, 
TreeMap рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХреБрдВрдЬреА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реЛрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЫрдБрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ 
Comparator рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 TreeMap < Integer, String > treeMap2 = TreeMap.of(Comparator.reverseOrder(), 3, "three", 6, "six", 1, "one"); assertEquals(treeMap2.keySet().mkString(), "631"); 
TreeSet рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреНрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ 
TreeMap рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд╕рдордп 
рдУ (рд▓реЙрдЧ рдПрди) рд╣реИ ред 
map.get(key) рд╡рд┐рдзрд┐ рд░рд┐рдЯрд░реНрди 
Option , рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ 
рдорд╛рдирдЪрд┐рддреНрд░ рдХреБрдВрдЬреА рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИред
7. рдЬрд╛рд╡рд╛ рд╕рдВрдЧрддрддрд╛
Vavr Collection API рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
7.1ред рдЬрд╛рд╡рд╛ рд╕реЗ Vavr рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ
Vavr рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЧреНрд░рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ AAll 
ofAll() рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИ рдЬреЛ 
java.util.Iterable рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ 
рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ 
рд╡рд╡рд░ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдПрдХ рдФрд░ 
ofAll() рдлреИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐ рд╕реАрдзреЗ рдЬрд╛рд╡рд╛ 
Stream рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред
рдЬрд╛рд╡рд╛ 
List рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп 
List рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП:
 java.util.List < Integer > javaList = java.util.Arrays.asList(1, 2, 3, 4); List < Integer > vavrList = List.ofAll(javaList); java.util.stream.Stream < Integer > javaStream = javaList.stream(); Set < Integer > vavrSet = HashSet.ofAll(javaStream); 
рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдлрд╝рдВрдХреНрд╢рди 
collector() , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Vavr рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 
Stream.collect() рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 List < Integer > vavrList = IntStream.range(1, 10) .boxed() .filter(i - > i % 2 == 0) .collect(List.collector()); assertEquals(4, vavrList.size()); assertEquals(2, vavrList.head().intValue()); 
7.2ред Vavr рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ
Value рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ 
Vavr рдкреНрд░рдХрд╛рд░ рд╕реЗ 
рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ 
toJavaXXX() рдкреНрд░рд╛рд░реВрдк рд╣реИред
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 Integer[] array = List.of(1, 2, 3) .toJavaArray(Integer.class); assertEquals(3, array.length); java.util.Map < String, Integer > map = List.of("1", "2", "3") .toJavaMap(i - > Tuple.of(i, Integer.valueOf(i))); assertEquals(2, map.get("2").intValue()); 
рд╣рдо Vavr рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЖрдЗрдЯрдо рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Java 8 
Collectors рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 java.util.Set < Integer > javaSet = List.of(1, 2, 3) .collect(Collectors.toSet()); assertEquals(3, javaSet.size()); assertEquals(1, javaSet.toArray()[0]); 
7.3ред рдЬрд╛рд╡рд╛ рдХрд▓реЗрдХреНрд╢рдВрд╕ рд╡реНрдпреВрдЬ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдп рддрдерд╛рдХрдерд┐рдд 
рд╕рдВрдЧреНрд░рд╣ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рдзрд┐рдпрд╛рдБ
рджреВрд╕рд░реА рдУрд░, рд╡реЗрд╡ рдЖрдзрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдорд╛рдирдХ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрджреНрдзрддрд┐ рдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдХреЗрд╡рд▓ 
List рджреГрд╢реНрдп рд╕рдорд░реНрдерд┐рдд рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдХреЗ рд▓рд┐рдПред
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджреГрд╢реНрдп рдкрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдБ 
UnsupportedOperationException ред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
 @Test(expected = UnsupportedOperationException.class) public void givenVavrList_whenViewConverted_thenException() { java.util.List < Integer > javaList = List.of(1, 2, 3) .asJava(); assertEquals(3, javaList.get(2).intValue()); javaList.add(4); } 
рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
 java.util.List < Integer > javaList = List.of(1, 2, 3) .asJavaMutable(); javaList.add(4); assertEquals(4, javaList.get(3).intValue()); 
8. рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдордиреЗ рд╡рд╡рд░ рдХрд▓реЗрдХреНрд╢рдВрд╕ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ред рд╡рд╣рд╛рдБ рднреА рдЙрдкрдпреЛрдЧреА рдФрд░ рдЙрддреНрдкрд╛рджрдХ рдПрдкреАрдЖрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ 
рдЬрд╛рд╡рд╛ рдбреЙрдХреНрдЯрд░ рдФрд░ рд╡рд╛рд╡рд░ рдХрд▓реЗрдХреНрд╢рдВрд╕ 
рдпреВрдЬрд░ рдЧрд╛рдЗрдб рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА 
Try , 
Option , 
Iterable Either рдФрд░ 
Future рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ 
Value рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬрд╛рд╡рд╛ 
Iterable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╡реЗ рд╕рдВрдЧреНрд░рд╣ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб 
рдЬреАрдердм рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА:
habr.com/ru/post/421839www.baeldung.com/vavr@Middle_java рджреНрд╡рд╛рд░рд╛ 
рдЕрдиреБрд╡рд╛рджрд┐рдд