热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lambda&Stream:收集地图

如何解决《Lambda&Stream:收集地图》经验,为你挑选了1个好方法。

我想使用Stream&Lambda夫妇构建一个Map.

我尝试了很多方法但是我被困了.这是使用Stream/Lambda和经典循环完成它的经典Java代码.

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

for(Entity entity : entities) {
    List 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);
        }

正如你所看到的,我只知道如何在列表中收集,但我不能对地图做同样的事情.这就是为什么我必须再次流式传输我的列表以构建第二个列表,最后将所有列表放在一个地图中.我也尝试了'collect.groupingBy'语句,因为它也应该生成一张地图,但我失败了.



1> Federico Per..:

您似乎想要将列表中的任何内容映射pprsToBeApproved到您的Funder实例,并按买方对它们进行分组Entity.

你可以这样做:

Map> 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

如果您不想要特定实体的重复资助者,则可以收集到集合的地图:

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

这用Collectors.groupingBy起来了Collectors.mapping.


@Lovegiver`Set`是一个不允许重复的集合.对于`Map > initMap = ...`,我不明白为什么编译器没有推断出正确的类型.`fr.getBuyerIdentification().getBuyer().getEntity()`返回一个类型为`Entity`的对象吗?并且`fr.getDocuments().get(0).getFunder()`返回一个类型为`Funder`的对象?如果两者都是,那么你应该没有任何问题.
推荐阅读
author-avatar
妩媚舞乙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有