使用条件流式传输地图列表

时间:2016-02-03 13:26:34

标签: java list java-8 java-stream

我有一个如下所示的列表:

List<Map<String, String>> listOfMaps;

从这个列表中,我想根据给定的条件只提取几张地图。通常,我会这样写:

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

我想用java8 stream编写这个。

2 个答案:

答案 0 :(得分:1)

您可以非常直接地将循环重写为流操作。

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

不确定它能给你带来什么。

答案 1 :(得分: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")));