首页 > 解决方案 > Collectors.groupingBy() 返回按升序排序的结果 java

问题描述

我按降序发送结果,但按升序输出

List<myEntity> myData = new ArrayList<>();
Map<Integer,List<myEntity>> myid = new LinkedHashMap<>();

try {
    myData = myService.getData(id); 
    myid = myData.stream().collect(Collectors.groupingBy(myEntity::getDataId)); 

这里 mydata 按 desc 顺序排序,但在按组数据 id 创建集合后,我的列表按升序排序。我希望我的收藏列表是降序而不是升序。

标签: javajava-8java-stream

解决方案


由于 Java 8 中描述的 @Holger 在分组时不保持顺序 ,因此 Collectors.groupingBy() 返回一个 HashMap,它不保证顺序。

这是您可以执行的操作:

myid = myData.stream()
.collect(Collectors.groupingBy(MyEntity::getDataId,LinkedHashMap::new, toList()));

会返回一个LinkedHashMap<Integer, List<MyEntity>>. 由于收集器使用的列表是 ArrayList,因此该顺序也将保持不变。


推荐阅读