簡體   English   中英

收集地圖流 <K,V> 到地圖 <K,List<V> &gt;

[英]Collect a Stream of Map<K,V> to Map<K,List<V>>

我有一個Stream< Map< K, V > > ,我試圖將這些地圖合並在一起,但保留列表中的重復值,因此最終的類型是Map< K, List<V> > 有沒有辦法做到這一點? 我知道toMap收集器有一個二進制函數來基本上選擇返回哪個值,但它能跟蹤轉換后的列表嗎?

如果aStream< Map< String, Int > >

a.flatMap(map -> map.entrySet().stream()).collect(
    Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (val1, val2) -> ??
);

使用groupingBy :看看javadoc,但在你的情況下它應該是這樣的:

a.flatMap(map -> map.entrySet().stream())
 .collect(
   Collectors.groupingBy(
     Map.Entry::getKey, 
     HashMap::new, 
     Collectors.mapping(Map.Entry::getValue, toList())
   )
);

要么:

a.map(Map::entrySet).flatMap(Set::stream)
 .collect(Collectors.groupingBy(
     Map.Entry::getKey, 
     Collectors.mapping(Map.Entry::getValue, toList())
   )
);

這比groupingBy解決方案有點晦澀,但我只是想指出,通過提供合並功能也可以使用toMap(正如你最初設定的那樣):

    a.flatMap(map -> map.entrySet().stream()).collect(
        Collectors.toMap(Map.Entry::getKey,
                entry -> { 
                    List<Integer> list = new ArrayList<>();
                    list.add(entry.getValue());
                    return list;
                },
                (list1, list2) -> {
                    list1.addAll(list2);
                    return list1;
                }));

如何轉換列表<object>至 Map<k, v> 使用 java stream<div id="text_translate"><p> 我想將List&lt;ObjectInList&gt;轉換為Map&lt;K, V&gt;</p><pre> class ObjectInList { List&lt;Long&gt; listWithLong; Map&lt;String, Object&gt; dataMap; // there is 'id' key, and i want to use this id as key in map to be converted }</pre><p> 新的 map 格式如下</p><pre>String type; // this type is value of dataMap. List&lt;Long&gt; contents</pre><p> List&lt;Object&gt;中的每個 Object 都可以有重復的類型</p><p>例如</p><pre>///////// before converted //////////// [ { list: [1,2,3], dataMap: { type: "a", } }, { list: [4,5,6], dataMap: { type: "b", } }, { list: [7,8], dataMap: { type: "a", } }, ] ///////////// after converted ////////// { "a": [1,2,3,7,8], "b": [4,5,6] }</pre></div></k,></object>

[英]How to convert LIst<Object> to Map<K, V> with using java stream

暫無
暫無

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

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