java - 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 创建集合后,我的列表按升序排序。我希望我的收藏列表是降序而不是升序。
解决方案
由于 Java 8 中描述的 @Holger 在分组时不保持顺序 ,因此 Collectors.groupingBy() 返回一个 HashMap,它不保证顺序。
这是您可以执行的操作:
myid = myData.stream()
.collect(Collectors.groupingBy(MyEntity::getDataId,LinkedHashMap::new, toList()));
会返回一个LinkedHashMap<Integer, List<MyEntity>>
. 由于收集器使用的列表是 ArrayList,因此该顺序也将保持不变。
推荐阅读
- azure-policy - 我可以向 Azure Policy、Initiative 或 Azure Policy 分配分配或添加标签吗?
- java - 使用 Java 的 Runtime.getRuntime().exec 我得到一些命令的错误,成功的其他命令——如何确定?
- javascript - 在反应中将状态从 JSX NavBar 传递到 JSX Map
- qt - 如何根据 QML 中不同 QAbstractListModel 的元素实现列表?
- c# - if 语句中的异步等待
- r - 如果单词在R中的列中重复,则合并行
- python-3.x - python不会刮掉文本,而是给我一个空白
- xamarin.forms - 从左侧截断标签文本
- c++ - SetWindowsHookEx WH_JOURNALRECORD 阻止鼠标点击 + 击键
- java - 词法分析器:区分是机器码和数轴