2016-03-29 11 views
5

Hallo Ich versuche eine Zeichenfolge Verkettung von Namen für jeden Lehrer zu haben, also muss ich sowohl Collectors.toSet und Collectors.joining(", ") verwenden, wie kann ich sie in 1 kombinieren Linie? Ich kann nur jede von ihnen separat machen, wie kann ich beide tun?Collect zu setzen mit Beitritt 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(", ")) 

Antwort

3

Sie sollten in der Lage sein collectingAndThen() zu verwenden:

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

genau das, was ich brauchte, danke. – Bazuka

+0

kann das auch tun: .... sammelnAndThen (toSet(), set -> set.stream(). Sammeln (Joining (",")) um die Fähigkeit zu haben, weitere Manipulationen im Stream hinzuzufügen wie Filter oder Sortieren – Bazuka

0

Ich nehme an, Sie wissen bereits, wie man das Set produziert. Wir nennen es teacherSet.

Sie wollen wieder Strom, nachdem der Satz Herstellung:

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

Sie können auch beitreten, nachdem Sie den Satz String.join Verwendung fertig sind produzieren. Hier ein Beispiel:

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

Oder in Ihrem Fall:

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