簡體   English   中英

Java 8 - 帶列表的平面地圖

[英]Java 8 -Flatten Map with Lists

我有一個結構,如Map <String,List<Map<String,Object>> 我想將一個函數應用於地圖,如下所示。 該方法接受一個鍵並使用列表的Map <String,Object> 每個鍵在列表中都有幾個Map <String,Object> 如何將處理方法應用於Map <String,Object>每個值的地圖鍵? 我能夠使用forEach循環(見下文),但我感覺這不是以功能方式解決問題的最佳方法。

TypeProcessor p=new TypeProcessor.instance();

//Apply this function to the key and each map from the list
// The collect the Result returned in a list.
Result process(String key, Map<String,Object> dataPoints);
List<Result> list = new ArrayList<>();
map.forEach(key,value) -> {
  value.forEach(innerVal -> {
    Result r=p.process(key,innerVal);
    list.add(r):
  });
});

從您的代碼中可以看出,您希望為整個Map應用process ,因此您可以這樣做:

 List<Result> l = map.entrySet()
            .stream()
            .flatMap(e -> e.getValue().stream().map(value -> process(e.getKey(), value)))
            .collect(Collectors.toList());

好吧,假設map包含key ,您不需要任何foreach 只需從外部map獲取值,將其流式傳輸,映射到新對象並收集到List

List<Result> list = 
    map.get(key)
       .stream()
       .map(v -> p.process(key,v))
       .collect(Collectors.toList());

暫無
暫無

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

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