2017-03-16 39 views
4

也許它是變態,但我想合併內部流的結果到上面的流上。Java 8流將內部流結果合併到流上面

例如,我們有一些數據複雜的地圖:

Map<String, List<Map<String, Object>>> dataMap 

,我需要收集所有對象名單。現在,我是這樣做的:

Set<Object> segmentIds = new HashSet<>(); 
dataMap.values().forEach(maps -> maps.forEach(map -> segmentIds.add(map.get("object")))); 

但它不是一個漂亮的方式。但我無法理解如何將數據從內部循環傳輸到外部以最終收集數據。

是否有可能沒有任何外部物體?

+2

我不太清楚你的輸入和輸出要求。你能提供[mcve]嗎? – Thomas

回答

6

怎麼了:

Set<Object> collect = dataMap.values() 
      .stream() 
      .flatMap(Collection::stream) 
      .map(map -> map.get("object")) 
      .collect(Collectors.toSet()); 
+0

謝謝!這正是我需要的。 – SoulCub

1

您必須使用Stream-API的flatMap

List<Object> allObjects = dataMap.values().stream() 
    .flatMap(l -> l.stream()) 
    .flatMap(m -> m.values().stream()) 
    .collect(Collectors.toList()) 

代碼沒有進行測試