簡體   English   中英

將對象列表轉換為地圖 <String,Map<String,Integer> &gt; java8流

[英]convert list of object into a map of <String,Map<String,Integer>> java8 streams

你好,我有一個對象列表,我的對象有三個字段

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)))));

這甚至沒有編譯。 非常感謝幫助

你可以通過鏈接兩個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}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM