你好我有一个对象列表我的对象有三个字段
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/