Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建基于最大值的地图_Java_List_Java 8_Java Stream - Fatal编程技术网

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]}