Lambda y corriente: recogen en un mapa

Lovegiver:

Me gustaría construir un mapa utilizando la pareja de la secuencia y de Lambda.

He intentado muchas maneras, pero estoy Stucked. Aquí está el código de Java clásica de hacerlo utilizando tanto Corriente / Lambda y bucles clásicos.

Map<Entity, List<Funder>> initMap = new HashMap<>();
List<Entity> entities = pprsToBeApproved.stream()
    .map(fr -> fr.getBuyerIdentification().getBuyer().getEntity())
    .distinct()
    .collect(Collectors.toList());

for(Entity entity : entities) {
    List<Funder> funders = pprsToBeApproved.stream()
        .filter(fr -> fr.getBuyerIdentification().getBuyer().getEntity().equals(entity))
        .map(fr -> fr.getDocuments().get(0).getFunder())
        .distinct()
        .collect(Collectors.toList());
    initMap.put(entity, funders);
        }

Como se puede ver, sólo sé cómo recopilar en una lista, pero yo no puedo hacer lo mismo con un mapa. Es por eso que tengo que transmitir mi lista de nuevo para construir una segunda lista que, finalmente, poner todo junto en un mapa. También he probado la declaración 'collect.groupingBy' como debe también producir un mapa, pero fallé.

Federico Peralta Schaffner:

Parece que desea asignar lo que está en la pprsToBeApprovedlista a sus Funderinstancias, agrupándolos por el comprador Entity.

Puede hacerlo de la siguiente manera:

Map<Entity, List<Funder>> initMap = pprsToBeApproved.stream()
    .collect(Collectors.groupingBy(
        fr -> fr.getBuyerIdentification().getBuyer().getEntity(), // group by this
        Collectors.mapping(
            fr -> fr.getDocuments().get(0).getFunder(), // mapping each element to this
            Collectors.toList())));                     // and putting them in a list

Si no desea que los donantes duplicados para una entidad en particular, puede obtener un mapa de conjuntos en su lugar:

Map<Entity, Set<Funder>> initMap = pprsToBeApproved.stream()
    .collect(Collectors.groupingBy(
        fr -> fr.getBuyerIdentification().getBuyer().getEntity(),
        Collectors.mapping(
            fr -> fr.getDocuments().get(0).getFunder(),
            Collectors.toSet())));

Esto utiliza Collectors.groupingByjunto con Collectors.mapping.

Supongo que te gusta

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