рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ, рд╣рдо рдЬрд╛рд╡рд╛ 12 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдПрдХ рдирдП рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЬреЗрдИрдкреА рдореЗрдВ рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "
рдХрд▓реЗрдХреНрдЯрд░ рдмрдирд╛рдПрдВ, рдЬреЛ рджреЛ рдЕрдиреНрдп рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИ" рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХрд╛ рдЕрдиреБрд░реЛрдз рдерд╛ред рдпрд╣ рджреЛ рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рднреА рджрд┐рд▓рдЪрд╕реНрдк - рдХрдЯ рдХреЗ рдиреАрдЪреЗ
рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд▓реЗрдХреНрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВрд╕рдВрдЧреНрд░рд╛рд╣рдХ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдзрд╛рд░рд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
list
:
list = Stream.of(1,2,3).collect(Collectors.toList());
рдпрд╣ рдПрдХ рдмреЗрдХрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдИ рдзрд╛рд░рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдЗрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛ рдЧрдпрд╛ рд╣реИ
рдкреНрд░рд▓реЗрдЦрди
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(
рдЕрддрд┐рдерд┐ 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(
рдЧрд┐рдирддреА рдХрд░реЗрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдЬреЛрдбрд╝реЗрдВ
рдЖрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдФрд╕рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЛрдЧ рдФрд░ рдЧрдгрдирд╛ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
AverageInt
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдк рдмрд╕
AverageInt
рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд▓реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рджреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
Teeing
рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
var result = Stream.of(5, 12, 19, 21) .collect(Collectors.teeing(
рдкрд░рд┐рдгрд╛рдо 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 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд░реЛрдЪрдХ рддрдереНрдп
рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ ред
рд╕рдлрд▓ рд╕рдВрдЧреНрд░рд╣рдгреАрдп!