5
你好,我有我的目标对象的名单有三个字段转换列表转换成地图<字符串,地图<字符串,整数>> java8流
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}}
格式我想在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)))));
这甚至不编译。
Map<String,Map<String,Integer>> map =
list.stream()
.collect(Collectors.
groupingBy(MyObject::getX,
Collectors.groupingBy(MyObject::getY,
Collectors.summingInt(MyObject::getZ))));
我希望我得到了你想要的正确的逻辑:帮助被链接两个groupingBy
Collector
S和一个summingInt
Collector
大加赞赏
请提供样品输入端,不太清楚你如何让所有的Y's和z的从一个单一的x –
你不应该重复使用你的流,也不应该你需要。我认为你的问题不是Streams的一个很好的匹配,因为我认为你正在尝试将前两个元素映射到'''MyObject.x'''和第三个和第四个元素,并使用第二个元素的x值。自定义收集器可能是可能的,但是您正在操纵很多状态 – Gavin