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

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java连接ldap服务器_从Java应用程序连接LDAP服务器「建议收藏」

    java连接ldap服务器_从Java应用程序连接LDAP服务器「建议收藏」我正在构建一个基于GXT(J2EE)的应用程序.现在的问题是我必须将应用程序连接到LDAP服务器.您能告诉我如何从我们的Java应用程序连接LDAP服务器以及我将使用哪些库或API?解决方法:要连接到LDAP,请查看以下包/类:javax.naming.directory.*javax.naming.ladp.*com.sun.jndi.ldap.LdapCtxFactorycom.sun.jnd…

    2022年5月14日
  • pycharm社区版下载安装教程_pycharm社区版下载

    pycharm社区版下载安装教程_pycharm社区版下载原文链接:PyCharm社区版的下载与安装PyCharm社区版的下载与安装以PyCharm2018.3.4社区版本为例:打开:PyCharm官网,选择Download选择社区版下载双击可执行文件进行安装,如果出现用户账户控制,选择是即可进入安装界面,选择Next选择安装位置安装选项这里:createdesktopshortcut:根据系统位数勾选对应的选项updatepathvariable:可以勾选将启动器添加到pathupd

    2022年8月28日
  • 区块链|CAP原理[通俗易懂]

    区块链|CAP原理[通俗易懂]分布式系统(distributedsystem)正变得越来越重要,大型网站几乎都是分布式的。分布式系统的最大难点,就是各个节点的状态如何同步。CAP定理是这方面的基本定理,也是理解分布式系统的起点。一、分布式系统的三个指标ConsistencyAvailabilityPartitiontolerance它们的第一个字母分别是C、A、P。EricBrewer说,这三个指标不可能同时做到。这个结论就叫做CAP定理。二、Partitiontolerance先看Parti

    2022年5月19日
  • pycharm激活码2021、【在线注册码/序列号/破解码】

    pycharm激活码2021、【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
  • 台风路径实时监控_查看Linux版本

    台风路径实时监控_查看Linux版本查看CentOS版本方法有以下命令可以查看:命令1:rpm-qcentos-release结果为:centos-release-7-7.1908.0.el7.centos.x86_64命令2:lsb_release-a这个命令适用于所有的linux,包括Redhat、SuSE、Debian、Centos等发行版。结果为:LSBVersion::core-4…

    2022年11月1日
  • PS磨皮滤镜降噪插件套装Imagenomic Professional Plugin Suite有什么功能

    PS磨皮滤镜降噪插件套装Imagenomic Professional Plugin Suite有什么功能ImagenomicProfessionalPluginSuitemac版是一款PS磨皮降噪滤镜插件套装,其中包含noiseware降噪插件、portraiture3磨皮滤镜和Realgrain胶片效果滤镜插件,各有各的功能,可以轻松完成磨皮、添加胶片效果、降噪等。PS磨皮滤镜降噪套装官方介绍Portraiture3 皮肤修饰 自动皮肤平滑,愈合和增强效果插件 Noiseware 消除噪音 屡获殊荣的插件和独立的照片降噪 Realgrain

    2022年7月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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