es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo convertir un valor de mapa utilizando stream

Tengo una tarea:
Devolver un mapa de empresas, donde la clave es su nombre y el valor es una lista de empleados almacenados como una cadena de texto que consiste en nombre y apellido separados por un espacio.
Aquí está mi solución y funciona bien:

Map<string,></string,><string>> getUserPerCompanyAsString() {
    return getCompanyStream()
            .collect(Collectors.toMap(Company::getName, company -> getUserNames(company.getUsers())));
}

private List<string> getUserNames(List<user> users) {
    return users.stream()
            .map(user -> user.getFirstName() + " " + user.getLastName())
            .collect(Collectors.toList());
}

public class Company {
    private final String name;
    private final List<user> users;
}

public class User {
    private final String firstName;
    private final String lastName;
    private final Sex sex;
    private final int age;
    private final List<account> accounts;
    private final List<permit> permits;
}

Entonces, mi pregunta es: ¿Cómo convertir List como un valor de mapa a List con nombre y apellido separados por un espacio en una única cadena de procesamiento sin un método auxiliar?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto es utilizando flatMap después de la operación map en la cadena de flujo. Aquí tienes el código modificado:

    Map<string,></string,><string>> getUserPerCompanyAsString() {
        return getCompanyStream()
                .collect(Collectors.toMap(Company::getName, company ->
                        company.getUsers().stream()
                                .map(user -> user.getFirstName() + " " + user.getLastName())
                                .collect(Collectors.toList())
                ));
    }
    

    En este código, después de mapear cada objeto User a una cadena con el nombre y apellido concatenados, utilizamos flatMap para combinar todos esos flujos individuales de cadenas en un solo flujo de cadenas. Ese flujo luego se recopila como una lista y se utiliza como el valor en el mapa. De esta manera, podemos lograr la salida deseada en una sola cadena de flujo sin métodos auxiliares.

Comments are closed.