gpt4 book ai didi

java - 将对象列表转换为 > java8 流的映射

转载 作者:搜寻专家 更新时间:2023-10-31 19:44:12 29 4
gpt4 key购买 nike

你好我有一个对象列表我的对象有三个字段

class MyObject{
String x;
String y;
int z;
//getters n setters
}

我需要将此列表转换为 Map<String,Map<String,Integer>>

就是这样的: {x1:{y1:z1,y2:z2,y3:z3},x2{y4:z4,y5:z5}} format 我想在 Java 8 中执行此操作,我认为我对它比较陌生。

我尝试了以下方法:

Map<String,Map<String,Integer>> map=list.stream().
collect(Collectors.
groupingBy(MyObject::getX,list.stream().
collect(Collectors.groupingBy(MyObject::getY,
Collectors.summingInt(MyObject::getZ)))));

这甚至无法编译。非常感谢帮助

最佳答案

您可以通过链接两个 groupingBy Collector 和一个 summingInt Collector 来实现:

Map<String,Map<String,Integer>> map = 
list.stream()
.collect(Collectors.
groupingBy(MyObject::getX,
Collectors.groupingBy(MyObject::getY,
Collectors.summingInt(MyObject::getZ))));

我希望我得到了你想要的正确逻辑。

将以下内容添加到输入 List 时:

list.add(new MyObject("A","B",10));
list.add(new MyObject("A","C",5));
list.add(new MyObject("A","B",15));
list.add(new MyObject("B","C",10));
list.add(new MyObject("A","C",12));

你得到一个输出 Map :

{A={B=25, C=17}, B={C=10}}

关于java - 将对象列表转换为 <String,Map<String,Integer>> java8 流的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38686769/

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