2016-03-29 3 views
5

こんにちは私は文字列に各教師の名前の組み合わせを表しています。 したがって、Collectors.toSetCollectors.joining(", ")の両方を使用する必要があります。 私はそれらのそれぞれを別々に作ることはできますが、どうすれば両方のことができますか?Javaに参加して設定するにはどうすればいいですか?

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

答えて

3

あなたはcollectingAndThen()を使用することができるはずです。

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

私が必要とまさに、ありがとうございました。 – Bazuka

+0

も可能です: .... collectionAndThen(toSet()、set-> set.stream()。collect(joined( "、")) ストリームにさらに操作を加える機能を持たせるためです。フィルタやソートなど – Bazuka

0

あなたはすでにセットの作成方法を知っていると仮定しています。我々はそれをteacherSetと呼ぶでしょう。

あなたはセットを製造した後に再ストリームしたい:

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

あなたがString.joinを使用してセットを生産終わった後にも参加することができます。次に例を示します。

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

またはあなたの場合:

// create teacher set... 
String.join(",", teacherSet); 
関連する問題