Asignar una lista y mapa en un mapa

tanvi:
@Getter 
static class Student {
    private Map<Status, Marks> statusAndMarks; 
}

class Status {
}

class Marks {
}

Map<Status, Student> map = new HashMap<>();
for (Student student : studentList) {
    for (Status status : student.getStatusAndMarks().keySet()) {
        map.put(status, student);
    }
}

¿Cómo escribo lo anterior código escrito en estilo funcional en Java 8? He escrito el siguiente código pero ¿cómo puedo escribir que el resultado de mi código es un mapa inmutable y no necesito para crear un mapa antes de la lambda?

studentList
    .forEach(student -> {
        student
        .getStatusAndMarks()
        .keySet().stream()
        .map(key -> map.put(key, statusKeyImportantMessage));
        });
también:

Usted fue lo suficientemente cerca si que habría utilizado forEachpara iterar el conjunto de claves de nuevo como:

Map<Status, Student> map = new HashMap<>();
studentList.forEach(student -> 
        student.getStatusAndMarks().keySet()
                .forEach(k -> map.put(k,student)));

Una representación similar como se ha dicho en otra respuesta para esto sería

Map<Status, Student> map = studentList.stream()
        .flatMap(s -> s.getStatusAndMarks().keySet()
                .stream()
                .map(status -> new AbstractMap.SimpleEntry<>(status, s)))
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b));

Nota, la función de fusión es sobrescribir un nuevo estudiante con el mismo estado más adelante en la iteración. Por otra parte, lo que podría ser una información muy útil a la consulta sería una lista de estudiantes que reciben la categoría. Estos pueden ser agrupadas usando una tubería de flujo similar a la siguiente:

Map<Status, List<Student>> statusWiseStudent = studentList.stream()
        .flatMap(s -> s.getStatusAndMarks().keySet()
                .stream()
                .map(status -> new AbstractMap.SimpleEntry<>(status, s)))
        .collect(Collectors.groupingBy(Map.Entry::getKey,
                Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

Supongo que te gusta

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