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 рджреНрд╡рд╛рд░рд╛
рдЕрдиреБрд╡рд╛рджрд┐рдд