2016-02-03 27 views
-1

我有一個看起來像這樣的列表:流映射列表與條件

List<Map<String, String>> listOfMaps; 

從這個名單,我想只提取基於給定條件的幾張地圖。通常情況下,我會這樣寫:

for(Map m : listOfMaps) { 
    if(m.get("someValue").equals("someOtherValue")) { 
      resultMap.put(m.get("a"), m.get("b")) 
    } 
} 

我想用java8流寫這個。

+0

'地圖的resultMap = listOfMaps.stream()過濾器(M - > m.get( 「someValue中」 ).equals(「someOtherValue」))。collect(toMap(m - > m.get(「a」),m - > m.get(「b」)));'' –

回答

1

您可以非常直接地將您的循環重寫爲流操作。

listOfMaps.stream() 
    .filter(m -> m.get("someValue").equals("someOtherValue")) 
    .forEach(m -> resultMap.put(m.get("a"), m.get("b"))); 

不確定特別是它給你帶來什麼。

1

我想你可以收集所有結果到一個新地圖:

Map<String, String> resultMap = listOfMaps.stream() 
    .filter(m -> "someOtherValue".equals(m.get("someValue"))) 
    .collect(Collectors.toMap(
     m -> m.get("a"), 
     m -> m.get("b")));