рдЬрд╛рд╡рд╛ 12 рдореЗрдВ рдирдпрд╛: рдЯреАрдЗрдВрдЧ рдХрд▓реЗрдХреНрдЯрд░

рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ, рд╣рдо рдЬрд╛рд╡рд╛ 12 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдПрдХ рдирдП рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЬреЗрдИрдкреА рдореЗрдВ рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ " рдХрд▓реЗрдХреНрдЯрд░ рдмрдирд╛рдПрдВ, рдЬреЛ рджреЛ рдЕрдиреНрдп рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИ" рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХрд╛ рдЕрдиреБрд░реЛрдз рдерд╛ред рдпрд╣ рджреЛ рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╕рднреА рджрд┐рд▓рдЪрд╕реНрдк - рдХрдЯ рдХреЗ рдиреАрдЪреЗ


рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд▓реЗрдХреНрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВ
рд╕рдВрдЧреНрд░рд╛рд╣рдХ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдзрд╛рд░рд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, list :
 list = Stream.of(1,2,3).collect(Collectors.toList()); //     1, 2  3 

рдпрд╣ рдПрдХ рдмреЗрдХрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдИ рдзрд╛рд░рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдЗрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛ рдЧрдпрд╛ рд╣реИ

рдкреНрд░рд▓реЗрдЦрди


Collectors#teeing рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдЕрдиреБрд╕рд╛рд░:
"" рдПрдХ рдХрд▓реЗрдХреНрдЯрд░ рджреЛ рдЕрдзреАрдирд╕реНрде рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рд╕реЗ рдмрдирд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдЕрдзреАрдирд╕реНрде рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдпреБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред "
рдореВрд▓
"" рдПрдХ рдРрд╕рд╛ рдХрд▓реЗрдХреНрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХрд╛ рд╕рдореНрдорд┐рд╢реНрд░рдг рд╣реЛрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рджреЛрдиреЛрдВ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд░реНрдЬ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "
рд╡рд┐рдзрд┐ рд╣реИрдбрд░:

 static <T, R1, R2, R> Collector<T, ?, R> teeing( Collector<? super T, ?, R1> downstream1, Collector<? super T, ?, R2> downstream2, BiFunction<? super R1, ? super R2, R> merger) 

рд░реЛрдЪрдХ рддрдереНрдп


рдпрд╣ рдПрдХ рдЯреА (рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ рдЯреАрдЗрдВрдЧ) рд╣реИ:



рддреАрдЬ рдПрдХ рдЯреА рд╕реЗ рдЖрдИред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, "рдПрдХ рдЯреА рд╕рдмрд╕реЗ рдЖрдо рдлрд┐рдЯрд┐рдВрдЧ (рдПрдХ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛, рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджрдХ) рдПрдХ рджреНрд░рд╡ рдзрд╛рд░рд╛ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рд╣реИ рдзрд╛рд░рд╛рдПрдБ, рдзрд╛рд░рд╛ - рдзрд╛рд░рд╛ / рдкреНрд░рд╡рд╛рд╣, рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрд╡рд╛рджрдХ)ред"
рдЕрдиреНрдп рдирд╛рдо рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ: рджреНрд╡рд┐рднрд╛рдЬрди (2_parts рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд), рджреНрд╡реИрдз, рджреНрд╡рд┐рднрд╛рдЬрдХ (рд╡рд┐рднрд╛рдЬрди), рдкреНрд░рддрд┐рдХреГрддрд┐, рдкреНрд░рд╢рдВрд╕рдХ (рд╡рд┐рднрд╛рдЬрди), рджреЛрд╣рди, unzipping, collectionToBothTndThen, biCollecting, Extended (рд╡рд┐рд╕реНрддрд╛рд░), рдлреЛрд░реНрдХрд┐рдВрдЧ, рдЖрджрд┐ред
рдХреЛрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд░реЗрдЯреЗрдб рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдпрд╣рд╛рдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг


рдореИрдВрдиреЗ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддреАрди рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рд╣реИрдВред

рдЕрддрд┐рдерд┐ рд╕реВрдЪреА


рд╣рдо рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЕрддрд┐рдерд┐ рдХреЛ рдирд┐рдордВрддреНрд░рдг рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕рдиреЗ рдЖрд░рдХреНрд╖рдг рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдФрд░ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ (рдореЗрд╣рдорд╛рдиреЛрдВ рдФрд░ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рд╕рд╣рд┐рдд)ред

 var result = Stream.of( // Guest(String name, boolean participating, Integer participantsNumber) new Guest("Marco", true, 3), new Guest("David", false, 2), new Guest("Roger",true, 6)) .collect(Collectors.teeing( //  ,    ,    Collectors.filtering(Guest::isParticipating, //        Collectors.mapping(o -> o.name, Collectors.toList())), //  ,       Collectors.summingInt(Guest::getParticipantsNumber), //      , //    EventParticipation::new )); System.out.println(result); //  // EventParticipation { guests = [Marco, Roger], // total number of participants = 11 } 


рдЕрддрд┐рдерд┐
 class Guest { private String name; private boolean participating; private Integer participantsNumber; public Guest(String name, boolean participating, Integer participantsNumber) { this.name = name; this.participating = participating; this.participantsNumber = participantsNumber; } public boolean isParticipating() { return participating; } public Integer getParticipantsNumber() { return participantsNumber; } } 


EventParticipation
 class EventParticipation { private List<String> guestNameList; private Integer totalNumberOfParticipants; public EventParticipation(List<String> guestNameList, Integer totalNumberOfParticipants) { this.guestNameList = guestNameList; this.totalNumberOfParticipants = totalNumberOfParticipants; } @Override public String toString() { return "EventParticipation { " + "guests = " + guestNameList + ", total number of participants = " + totalNumberOfParticipants + " }"; }} 


рдирд╛рдореЛрдВ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдореЛрдВ рдХреА рдзрд╛рд░рд╛ рдХреЛ рджреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

 var result = Stream.of("Devoxx", "Voxxed Days", "Code One", "Basel One", "Angular Connect") .collect(Collectors.teeing( //   Collectors.filtering(n -> n.contains("xx"), Collectors.toList()), //   Collectors.filtering(n -> n.endsWith("One"), Collectors.toList()), //  -       (List<String> list1, List<String> list2) -> List.of(list1, list2) )); System.out.println(result); // -> [[Devoxx, Voxxed Days], [Code One, Basel One]] 

рдЧрд┐рдирддреА рдХрд░реЗрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдЬреЛрдбрд╝реЗрдВ


рдЖрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдФрд╕рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЛрдЧ рдФрд░ рдЧрдгрдирд╛ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП AverageInt рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдк рдмрд╕ AverageInt рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд▓реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рджреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Teeing рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

 var result = Stream.of(5, 12, 19, 21) .collect(Collectors.teeing( //   Collectors.counting(), //   Collectors.summingInt(n -> Integer.valueOf(n.toString())), // : (count, sum) -> new Result(count, sum); Result::new )); System.out.println(result); // -> {count=4, sum=57} 

рдкрд░рд┐рдгрд╛рдо
 class Result { private Long count; private Integer sum; public Result(Long count, Integer sum) { this.count = count; this.sum = sum; } @Override public String toString() { return "{" + "count=" + count + ", sum=" + sum + '}'; }} 


рд╕рдВрднрд╡ рдЬрд╛рд▓


Map.Entry

рдХрдИ рдЙрджрд╛рд╣рд░рдг Map.Entry рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Map.Entry рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдРрд╕рд╛ рди рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЛ Map рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЛрд░ рдореЗрдВ рдХреЛрдИ рдорд╛рдирдХ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рднреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирдИ рдЬрд╛рд╡рд╛ 12 рд╕реБрд╡рд┐рдзрд╛рдПрдБ


рдЖрдк рдЗрд╕ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдЬрд╛рд╡рд╛ 12 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд░реЛрдЪрдХ рддрдереНрдп рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ ред

рд╕рдлрд▓ рд╕рдВрдЧреНрд░рд╣рдгреАрдп!

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


All Articles