栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java8中Collectors.groupingBy()处理后的Map乱序问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java8中Collectors.groupingBy()处理后的Map乱序问题

Java8中Collectors.groupingBy()处理后的Map乱序问题 一、问题说明:

在数据库中取出数据后,按数据的某一属性进行分组,但得到的分组是乱序的,并不是按数据库中的顺序排列的。

二、解决过程

查看Collectors.groupingBy()的源码,发现该方法是默认 HashMap ,其次 value 值为 ArrayList 返回的,而 HashMap 是无序的。

//默认HashMap返回
public static  Collector> 
groupingBy(Function classifier,Collector downstream) {
	return groupingBy(classifier, HashMap::new, downstream);
}

//value的List默认ArrayList返回
public static Collector> toList() {
	return new CollectorImpl<>((Supplier>) ArrayList::new, List::add,(left, right) -> { left.addAll(right); return left; },CH_ID);
}
三、解决方法:

修改默认的HashMap返回方式,传一个有序的Map结果变得有序。

原来的代码:

//默认的返回的 HashMap 是无序的
pointTables.stream().collect(Collectors.groupingBy(PointTable::getP_param));

修改为:

//linkedHashMap 是有序的Map
pointTables.stream().collect(Collectors.groupingBy(PointTable::getP_param,
linkedHashMap::new, Collectors.toCollection(ArrayList::new)));

这样数据就会按一定的顺序进行排列了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644264.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号