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