[英]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.