2016-03-29 17 views
5

Xin chào Tôi đang cố gắng để có một chuỗi đại diện cho tập hợp các tên cho mỗi giáo viên, do đó tôi cần sử dụng cả hai Collectors.toSetCollectors.joining(", ") làm cách nào để sử dụng chúng trong 1 dòng kết hợp? Tôi chỉ có thể làm cho mỗi người trong số họ một cách riêng biệt như thế nào tôi có thể làm cả hai người trong số họ?Thu thập để thiết lập với việc tham gia 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(", ")) 

Trả lời

3

Bạn sẽ có thể sử dụng collectingAndThen():

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

chính xác những gì tôi cần, cảm ơn bạn. – Bazuka

+0

cũng có thể làm điều đó: .... collectAndThen (toSet(), set -> set.stream(). Collect (join (",")) để có khả năng thêm thao tác trên luồng chẳng hạn như bộ lọc hoặc sắp xếp – Bazuka

0

Tôi giả sử bạn đã biết cách sản xuất bộ này. Chúng tôi sẽ gọi nó là teacherSet.

Bạn muốn tái luồng sau khi sản xuất các thiết lập:

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

Bạn cũng có thể tham gia sau khi bạn đã hoàn tất sản xuất các thiết lập sử dụng String.join. Dưới đây là một ví dụ:

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

Hoặc trong trường hợp của bạn:

// create teacher set... 
String.join(",", teacherSet); 
Các vấn đề liên quan