SyncMaster:
Esto podría ser un simple Java arroyos cuestión. Por ejemplo, tengo un List<Student>
objeto.
public class Student {
public String name;
public Set<String> subjects;
public Set<String> getSubjects() {
return subjects;
}
}
¿Cómo puedo obtener todas las materias cursadas por la lista de los estudiantes?
Puedo hacer esto utilizando una para cada bucle. ¿Cómo puedo convertir el siguiente código para utilizar corrientes?
for (Student student : students) {
subjectsTaken.addAll(student.getSubjects());
}
Aquí está mi intento de utilizar Java 8 corrientes. Esto me da una Incompatible types
error.
Set<String> subjectsTaken = students.stream()
.map(student -> student.getSubjects())
.collect(Collectors.toSet());
Eran :
Su código actual produce una Set<Set<String>>
, no una Set<String>
.
Debe utilizar flatMap
, no map
:
Set<String> subjectsTaken =
students.stream() // Stream<Student>
.flatMap(student -> student.getSubjects().stream()) // Stream<String>
.collect(Collectors.toSet()); // Set<String>