2016-03-29 14 views
5

Merhaba, her bir öğretmen için adında bir dizi dizinin birleşimini temsil etmeye çalışıyorum bu yüzden hem Collectors.toSet hem de Collectors.joining(", ") kullanmam gerekiyor, bunları 1 arada nasıl kullanabilirim? Her birini ayrı ayrı yapabilirim. İkisini de nasıl yapabilirim?Java 8 ile birleştirmek için toplayın

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(", ")) 

cevap

3

Sen collectingAndThen() kullanmak gerekir: İşte bir örnek

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

tam olarak ne gerekli, teşekkürler. – Bazuka

+0

da bunu yapabilir: .... collectingAndThen (toSet(), set -> set.stream() akışında daha fazla manipülasyon ekleme özelliğine sahip olmak için (birleştirme (",")) filtre veya sıralama gibi – Bazuka

0

Zaten kümeyi nasıl üreteceğinizi biliyorsunuz. Biz buna teacherSet diyoruz.

Sen yeniden akışı için set üretiminde sonra istiyorum:

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

Eğer String.join kullanarak setini üreten bittikten sonra da katılabilir.

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

Senin durumunda

:

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