Java stream操作toMap总结_stream tomap-程序员宅基地

技术标签: JAVA  java  stream  

1、map 对象本身,重复的key,放入List。

Map<String, List<Working>> map =
                workings.stream().collect(Collectors.toMap(Working::getInvoicePage,
                        e -> {
    
                            ArrayList<Working> list = new ArrayList<>();
                            list.add(e);
                            return list;
                        },
                        (oldList, newList) -> {
    
                            oldList.addAll(newList);
                            return oldList;
                        }));
		// 或者使用groupBy
		// 存为List
        Map<String, List<BusinessSceneDetail>> collect0 =
                sceneDetailMap.values().stream().collect(
                        Collectors.groupingBy(BusinessSceneDetail::getDataSourceCode));
        // 存为set
        Map<String, Set<BusinessSceneDetail>> collect =
                sceneDetailMap.values().stream().collect(
                        Collectors.groupingBy(BusinessSceneDetail::getDataSourceCode, Collectors.toSet()));
        // 多层map
        Map<String, Map<String, Set<BusinessSceneDetail>>> collect1 = sceneDetailMap.values().stream().collect(
                Collectors.groupingBy(BusinessSceneDetail::getDataSourceCode, Collectors.groupingBy
                        (BusinessSceneDetail::getBusinessSceneCode, Collectors.toSet())));
        // 对象子属性 map
        Map<String, List<String>> collect2 = sceneDetailMap.values().stream().collect(Collectors.groupingBy
                (BusinessSceneDetail::getDataSourceCode, Collectors.mapping(BusinessSceneDetail::getRuleContent,
                        Collectors.toList())));
        // 对象按照规则获取一个
        Map<String, BusinessSceneDetail> collect3 =
                sceneDetailMap.values().stream().collect(Collectors.groupingBy
                        (
                                BusinessSceneDetail::getDataSourceCode,
                                Collectors.collectingAndThen(
                                        Collectors.maxBy(Comparator.comparingInt(BusinessSceneDetail::getCreatorId)),
                                        Optional::get
                                )
                        ));

        // 对象按照规则获取一个里面的值 p肯定存在
        Map<String, String> collect4 = sceneDetailMap.values().stream().collect(Collectors.groupingBy
                (
                        BusinessSceneDetail::getDataSourceCode,
                        Collectors.collectingAndThen(
                                Collectors.maxBy(Comparator.comparingInt(BusinessSceneDetail::getCreatorId)),
                                p -> p.get().getRuleContent()
                        )
                ));
                
        // map的value进行排序
           Map<String, List<SysDictionary>> map = sysDictionaryList.stream().collect(
                Collectors.groupingBy(
                        SysDictionary::getSysCode,
                        Collectors.collectingAndThen(
                                Collectors.toCollection(() -> new TreeSet<>((Comparator<Object>) (o1, o2) -> 0)),
                                ArrayList::new
                        )
                )
        );
        // map的key进行排序
 		Map<String, List<SysDictionary>> map1 = sysDictionaryList.stream().collect(
                Collectors.groupingBy(
                        SysDictionary::getSysCode,
                        TreeMap::new,
                        Collectors.toList()
                )
        );

groupBy其他用法参考 https://blog.csdn.net/u014231523/article/details/102535902
2、map 对象本身,重复的key,替换内容。

Map<String, Working> map =
                workings.stream().collect(Collectors.toMap(Working::getInvoicePage,
                Function.identity(),
                (oldWorking, newWorking) -> newWorking));

3、map 对象成员变量,重复的key,放入List。

Map<String, List<String>> map =
                workings.stream().collect(Collectors.toMap(Working::getInvoicePage,
                        e -> {
    
                            ArrayList<String> list = new ArrayList<>();
                            list.add(e.getStatus());
                            return list;
                        },
                        (oldList, newList) -> {
    
                            oldList.addAll(newList);
                            return oldList;
                        }));

4、map 对象成员变量,重复的key,替换。

Map<String, String> map =
                workings.stream().collect(Collectors.toMap(Working::getInvoicePage,
                        Working::getStatus,
                        (oldWorking, newWorking) -> newWorking));

5、带排序

TreeMap<String, List<Working>> collect =
                workings.stream().collect(Collectors.toMap(Working::getInvoicePage,
                        e -> {
    
                            ArrayList<Working> list = new ArrayList<>();
                            list.add(e);
                            return list;
                        },
                        (oldList, newList) -> {
    
                            oldList.addAll(newList);
                            return oldList;
                        },
                        () -> new TreeMap<>(Comparator.comparing(Integer::valueOf))));
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43928349/article/details/107180127

智能推荐

标题:工作中如何保持稳定的情绪?我的看法和经验分享-程序员宅基地

文章浏览阅读519次。在工作中保持稳定的情绪是一个持续的挑战,但通过意识、觉察和积极的行动,我们可以更好地应对情绪波动,并保持健康的心态。通过接纳情绪、建立情绪觉察、寻找情绪出口、培养积极心态和寻求支持,我们可以在工作中更加稳定地发挥自己的潜力,提高工作效率和心理健康。

Tensorflow基础应用-图像分类_tensorflow分类算法-程序员宅基地

文章浏览阅读466次。采用Cifar10的图片数据,简单实现对图像的分类算法。主要目的熟悉Tensorflow中如何实现全连接网络,卷积神经网络,loss的计算等。import tensorflow as tfimport osimport pickleimport numpy as npCIFAR_DIR = "./../cifar-10-batches-py"print(os.listdir(CI..._tensorflow分类算法

指针和引用的区别-程序员宅基地

文章浏览阅读1.2k次。7.当指针作为形参进行传递时,是将一个实参的一个拷贝传递给形参,两者指向的地址相同,但不是同一变量,在函数中改变这个变量的指向不影响实参。6.引用的本质是指针同样占据4字节内存,而指针是具体变量占据内存还需具体问题具体分析。1.指针是一个变量,存储一个地址,引用是所引用对象的别名,与所引用对象相同。5.sizeof指针得到指针大小,sizeof引用得到引用所指向变量大小。3.指针在初始化之后可以改变指向,而引用在初始化之后不可以再改变。2.指针可以为空,引用不能为空,且定义之后必须初始化。_指针和引用的区别

张量Tensor(机器学习的数学基础)_机器学习中张量-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏4次。介绍张量Tensor_机器学习中张量

添加版权的Plugin报错_plugin was invalid-程序员宅基地

文章浏览阅读192次。前提:已经导入const webpack=require('webpack')解决方法:查查变量名,一般变量名写错了!_plugin was invalid

python 将数据输出到文件中_python输出到文件-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏3次。python快速将数据输出到文件中_python输出到文件

随便推点

显卡驱动无法支持cuda11.7版本(终于捋清楚显卡驱动、cuda、pytorch的对应关系了!!!)_cuda 11.7-程序员宅基地

文章浏览阅读1k次,点赞31次,收藏14次。用pytorch编写机器学习代码总会遇到cuda、显卡驱动版本不匹配的问题,经过一番折腾,终于捋清楚显卡驱动、cuda、pytorch的对应关系了!!!_cuda 11.7

Rancher(V2.6.3)安装K8s教程_rancher最新版教程-程序员宅基地

文章浏览阅读432次。在某些情况下,kube-dns 可能无法识别您的服务名称,从而导致服务无法被正确解析。这种情况通常发生在您的本地网络配置中存在一些问题,例如您的网络 DNS 服务器无法识别 Kubernetes 的服务名称。为了解决这个问题,您可以在您的主机上手动配置一个 DNS 解析规则,以便将 Kubernetes 的服务名称解析为正确的 IP 地址。在执行的过程中需要等待很长的时间,中途在Rancher界面可能会看到报错信息,类似于以下两个。文件通常是一个受保护的系统文件,因此在修改之前,请确保已经有相应的权限。_rancher最新版教程

postman传list方式_postman接口传列表-程序员宅基地

文章浏览阅读646次。postman_postman接口传列表

Java常见集合类区别_java集合对比-程序员宅基地

文章浏览阅读1.1k次。HashMap允许使用null作为key或value,而Hashtable不允许。HashMap是线程不安全的,因此性能较好;但Hashtable是线程安全的,因此性能较差。实际上,在多线程环境下,Java的Collections工具类将HashMap包装成线程安全的类。因此依然应该使用HashMap。编程时应该尽量避免使用Hashtable除非在一个古老的API中强制要求使用Hashtable4分钟理清Java常见集合类区别,看完80%的同学都涨薪了。_java集合对比

基于python豆瓣电影爬虫数据可视化分析推荐系统(完整系统源码+数据库+详细文档+论文+详细部署教程)_python电影评论爬取分析可视化系统-程序员宅基地

文章浏览阅读1.9k次,点赞18次,收藏34次。Django(发音为"jan-go")是一个高级的Python web框架,它鼓励快速开发和干净、可重用的设计。Django 遵循经典的 Model-View-Controller(MVC)软件设计模式,但采用了稍微不同的结构。在Django中,这个模式被称为Model-View-Template(MVT)。负责数据存储和检索。定义数据模型,通过对象关系映射(ORM)将数据模型映射到数据库表。处理用户请求,从模型中检索数据,并将数据传递给模板进行渲染。定义如何呈现数据。_python电影评论爬取分析可视化系统

网关 Spring Cloud Gateway 监控 actuator_spring cloud gateway actuator-程序员宅基地

文章浏览阅读7k次,点赞2次,收藏10次。全部详细路由信息查询路由过滤器全局过滤器网关路线过滤器刷新路由缓存查询网关中定义的路由查询有关特定路线的信息创建和删除特定路由本文Spring Cloud Gateway 版本:2020.0.0Spring Cloud Gateway添加Spring Boot Actuator( spring-boot-starter-actuator )的依赖,并将 gateway 端点暴露,即可获得若干监控端点,监控 & 操作Spring Cloud Gateway的方方面面。_spring cloud gateway actuator

推荐文章

热门文章

相关标签