gpt4 book ai didi

java - 收集以映射已排序流的顺序/位置值

转载 作者:行者123 更新时间:2023-12-01 14:14:29 24 4
gpt4 key购买 nike

我正在使用预定义的 myComparator 对流中的一组填充的 MyObject(该对象具有 getName() getter)进行排序。

然后一旦排序,有没有办法将 MyObject 的名称和排序中对象的顺序/位置收集到映射中?

这是我认为它应该是什么样子:

Set<MyObject> mySet;  // Already populated mySet 

Map<String, Integer> nameMap = mySet.stream()
.sorted(myComparator)
.collect(Collectors.toMap(MyObject::getName, //HowToGetThePositionOfTheObjectInTheStream));

例如,如果该集合包含三个对象(object1 名称为 name1,object2 名称为 name2,object3 名称为 name3)并且在流期间对它们进行排序,我如何获得如下所示的结果映射:
name1, 1
name2, 2
name3, 3

谢谢。

最佳答案

一个 Java Stream不公开元素的任何索引或定位,所以我知道无法替换 /*HowToGetThePositionOfTheObjectInTheStream*/使用流魔法来获得所需的数字。

相反,一种简单的方法是收集到 List相反,它为每个元素提供了一个索引。它是从零开始的,因此在转换为 map 时,请加 1。

List<String> inOrder = mySet.stream()
.sorted(myComparator)
.map(MyObject::getName)
.collect(Collectors.toList());
Map<String, Integer> nameMap = new HashMap<>();
for (int i = 0; i < inOrder.size(); i++) {
nameMap.put(inOrder.get(i), i + 1);
}

关于java - 收集以映射已排序流的顺序/位置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50536199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com