Vavr рд╕рдВрдЧреНрд░рд╣ рдПрдкреАрдЖрдИ рдЧрд╛рдЗрдб

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/421839
www.baeldung.com/vavr

@Middle_java рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд

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


All Articles