collectors.groupingby属性分组_group by having order by

collectors.groupingby属性分组_group by having order by问题描述:当我们对List根据时间排序,然后根据某个字段分组后,会产生乱序的问题。 解决办法:因为Collectors.groupingBy分组后默认返回HashMap类型,我们修改为LinkedHashMap即可。Collectors.groupingBy部分源码://一个参数classifierpublicstatic<T,K>Collector<T,?,Map<K,List<T>>>groupingBy(Fu.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

问题描述:
当我们对List根据时间排序,然后根据某个字段分组后,会产生乱序的问题。
 
解决办法:
因为Collectors.groupingBy分组后默认返回HashMap类型,我们修改为LinkedHashMap即可。

Collectors.groupingBy部分源码:

//一个参数 classifier
public static <T, K> Collector<T, ?, Map<K, List<T>>>
groupingBy(Function<? super T, ? extends K> classifier) { 
   
    return groupingBy(classifier, toList());
}

//两个参数 classifier 和 downstream
public static <T, K, A, D>
    Collector<T, ?, Map<K, D>> groupingBy(Function<? super T, ? extends K> classifier,
                                          Collector<? super T, A, D> downstream) { 
   
    return groupingBy(classifier, HashMap::new, downstream);
}

//三个参数 classifier 和 mapFactory 和 downstream
public static <T, K, D, A, M extends Map<K, D>>
    Collector<T, ?, M> groupingBy(Function<? super T, ? extends K> classifier,
                                  Supplier<M> mapFactory,
                                  Collector<? super T, A, D> downstream) { 
   ..}

通过源码可以看到,我们可以上传三个参数,分别是:
classifier:按照什么分组
mapFactory:最后的结果返回的容器
downstream:收集分类的结果的收集器
 
当我们只上传一个参数后,默认第二个参数downstream是HashMap::new,也就是返回结果用HashMap存储,我们想返回HashMap就需要调用三个参数的方法,自定义downstream为LinkedHashMap::new即可。

样例:

LinkedHashMap<String,List<ProcessDetails>> resultSort;

//根据开始日期排序, groupBy字段分组返回类型修改为LinkedHashMap,否则乱序
resultSort = result
        .stream()
        .sorted(Comparator.comparing(ProcessDetails::getBeginTime))
        .collect(Collectors.groupingBy(ProcessDetails::getGroupBy,LinkedHashMap::new,Collectors.toList()));
        

以上就是Collectors.groupingBy分组后乱序问题的全部内容

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/

看完如果对你有帮助,感谢点击下面的一键三连支持!
[哈哈][抱拳]

请添加图片描述在这里插入图片描述
加油!

共同努力!

Keafmd

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171407.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 负数的二进制表示方法「建议收藏」

    负数的二进制表示方法「建议收藏」负数的二进制表示方法假设有一个int类型的数,值为3,那么,我们知道它在计算机中表示为:00000000000000000000000000000011因为int类型的数占用4字节(32位),所以前面填了一堆0。在计算机中,负数以其正值的补码形式表达。什么叫补码呢?这得先从原码,反码说起。原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。比如

  • Mac上的抓包工具Charles

    Mac上的抓包工具Charles今天就来看一下Mac上如何进行抓包,之前有一篇文章介绍了使用Fidder进行抓包http://blog.csdn.net/jiangwei0910410003/article/details/19806999不过可惜的是,Fidder使用C#开发的,所以就不能在Mac上使用了,不过还有另外一个抓包神器,就是Charles,它是Java开发的,所以跨平台,不仅可以在Mac上使

  • 电商网站的云配置推荐是什么_云服务器配置怎么选

    电商网站的云配置推荐是什么_云服务器配置怎么选电商网站该如何进行云服务器配置呢?电商云服务器的配置选择,其实和网站或应用的类型、访问量、数据量大小、程序质量等因素有关,建议和您的网站或应用的开发技术人员沟通,选择最适合您的配置。如果您没有技术人员可提供建议,可以参考我们的建议进行配置选择。网站初始阶段访问量小,只需要一台低配置的服务器即可,应用程序、数据库、文件等所有资源均在一台服务器上。阿里云服务器具有强大的弹性扩展和快速开通能力。随着业务的增长,你可以随时在线增加服务器的CPU、内存、硬盘以及带宽等配置,或者增加服务器数量,无需担心低配服务器.

  • a 标签中 写页面刷新代码

    a 标签中 写页面刷新代码

  • 火星今天飞抵西非国家寻找埃博拉疫情

    火星今天飞抵西非国家寻找埃博拉疫情

  • 亿图2021激活码【最新永久激活】「建议收藏」

    (亿图2021激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1STL5S9V8F-eyJsa…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号