Java 如何创建基于最大值的地图
我有一个物品清单。每个对象有两个属性Java 如何创建基于最大值的地图,java,list,java-8,java-stream,Java,List,Java 8,Java Stream,我有一个物品清单。每个对象有两个属性 名字 idSet 例如: 1. name = "CH2OH" idSet = "223" 2. name = "CH2CH2OH" idSet = "255,310" 3. name = "CH2OH" idSet = "223,256" 4. name = "CH2OH" idSet = "223,256,295" 1、3和4的名称相同,但idList不同。但是3包含1的空闲项+一个新id,4包含3的
- 名字
- idSet
1. name = "CH2OH" idSet = "223"
2. name = "CH2CH2OH" idSet = "255,310"
3. name = "CH2OH" idSet = "223,256"
4. name = "CH2OH" idSet = "223,256,295"
1、3和4的名称相同,但idList不同。但是3包含1的空闲项+一个新id,4包含3的空闲项+一个新id
我想得到一个列表或流,名称作为键,idList作为值。然而,游手好闲的人应该总是获得最大收益
根据示例预期输出
- name = "CH2CH2OH" idSet = "255,310"
- name = "CH2OH" idSet = "223,256,295"
如何使用Java8获得它。我试过了。但问题是,只考虑一个属性,它就会得到不同的流。它是随机获得一个,然后消除其他。我想通过考虑两个属性来获得流。谢谢尝试这样的方法。我在昨天看的YT视频中找到了这个解决方案。大约到1:58:30
List myList=createObjects();
Map myMappedList=myList.stream()
.collect(收集器).groupingBy(MyObject::getName、,
Collectors.mapping(MyObjects::getidSet,
Collectors.maxBy((a,b)->a.toString().length()-b.toString().length());
//以下是示例的输出(使用MyObject类中的toString重写):
System.out.println(myMappedList);
{CH2OH=可选[223256295],CH2CH2OH=可选[255310]}
通过“max”,比较器将查找字符串长度最长的idset
希望这有帮助,我认为这是一个好问题。Venkat Subramaniam认为谈论“如何使用java 8获得它”非常重要。。。嗯,通过编写代码。如果你不知道怎么做,那就去学习一些教程吧。有很多。这个问题要么不清楚,要么太宽泛。@Seelenvirtuose:我试过这个[](),但问题是它只考虑了一个属性而变得清晰。它是随机获得一个,然后消除其他。我想通过考虑两个属性来获得流。请发布一个版本的代码,你真的需要更精确。你有什么样的小溪?很明显,您不是在谈论
java.util.stream.stream
…我认为这是一个非常清楚的问题。。。这其实也是一个很好的问题。非常感谢你的回答。它起作用了很高兴它起作用了。
List<MyObjects> myList = createObjects();
Map<String, Optional<String>> myMappedList = myList.stream()
.collect(Collectors.groupingBy(MyObjects::getName,
Collectors.mapping(MyObjects::getidSet,
Collectors.maxBy((a, b) -> a.toString().length() - b.toString().length()))));
//Here's the output with your example (Using toString override in MyObjects Class):
System.out.println(myMappedList);
{CH2OH=Optional[223,256,295], CH2CH2OH=Optional[255,310]}