2016-09-13 4 views
3

Java 스트림을 학습하고 HashSet<Person>HashSet<SortedSet<Person>>에서 얻으려고합니다.Java 스트림으로 세트 세트에서 모든 오브젝트를 수집하십시오.

HashSet<Person> students = getAllStudents(); 
HashSet<SortedSet<Person>> teachersForStudents = students.stream().map(Person::getTeachers).collect(Collectors.toCollection(HashSet::new)); 
HashSet<Person> = //combine teachers and students in one HashSet 

은 정말 하나의 HashSet<Person>의 모든 교사와 모든 학생을 결합하기 위해 무엇을 할 수 있습니다. 내 스트림을 수집 할 때 내가 뭔가 잘못하고있는 것 같아?

HashSet<Person> combined = 
    students.stream() 
      .flatMap(student -> Stream.concat(Stream.of(student), student.getTeachers().stream())) 
      .collect(Collectors.toCollection(HashSet::new)); 

concat은 교사의 스트림에 연결하는 데 사용됩니다, 학생 자체에 의해 형성된 스트림, 얻을 : 당신은 flatMap 교사와 함께 학생에 의해 형성된 스트림에 각 학생이 수

답변

3

of.

+5

우선 'HashSet'이든, 'Set'이든 상관없이, 나는 묻는다. 그 외에, 중첩 된 작업의 작업 부하를 줄일 수 있습니다. 'HashSet'과'toSet()'의 불특정 결과 타입이 순서를 유지하지 않기 때문에 각각의 학생보다는 중첩 된 싱글 톤 스트림으로 전체 학생들을 연결시킬 수 있습니다 :'Set combined = Stream.concat (students – Holger

+0

@Holger 왜 대답하지 않겠습니까? (학생) -> student.stream (학생 -> student.getTeachers(). – djeikyb

관련 문제