Cómo obtener un conjunto de una lista de objetos utilizando corrientes de Java

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 typeserror.

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>

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=184062&siteId=1
Recomendado
Clasificación