2016-03-29 8 views
5

Ciao Sto cercando di avere una stringa rappresenta la concatenazione del set di nomi per ciascun insegnante, quindi ho bisogno di usare sia Collectors.toSet e Collectors.joining(", ") come posso usarli in 1 linea di combinazione? Posso solo rendere ognuno di loro separatamente come posso fare entrambi?Raccogli per impostare con l'aggiunta Java 8

students.stream().collect(Collectors.groupingBy(student -> student.getTeacherName(), mapping(student -> student.getName(), toSet()) 


students.stream().collect(Collectors.groupingBy(student -> student.getTeacherName(), mapping(student -> student.getName(), joining(", ")) 

risposta

3

Si dovrebbe essere in grado di utilizzare collectingAndThen():

students.stream() 
     .collect(groupingBy(Student::getTeacherName, 
       mapping(Student::getName, 
         collectingAndThen(toSet(), set -> String.join(", ", set))))) 
+0

esattamente quello che mi serviva, grazie. – Bazuka

+0

può anche farlo: .... collectingAndThen (toSet(), set -> set.stream(). Collect (join (",")) per avere la possibilità di aggiungere ulteriori manipolazioni nello stream come filtro o ordinamento – Bazuka

0

Suppongo che tu sappia già come produrre il set. Lo chiameremo teacherSet.

si vuole ri-stream dopo aver prodotto la serie:

// create teacher set... 
teacherSet.stream().collect(Collectors.joining(",")); 

È inoltre possibile partecipare dopo aver finito produrre l'apparecchio con String.join. Ecco un esempio:

String.join(",", Arrays.stream("1,2,3,4,3,2,1".split(",")).collect(Collectors.toSet()); 

o nel vostro caso:

// create teacher set... 
String.join(",", teacherSet);