使用流从地图列表中检索值

时间:2018-08-28 02:26:00

标签: java list java-stream

我有一张地图清单: List<Map<String, Object>>

地图由键nameposition组成。

我需要从列表的所有映射中检索键position的所有值。

目前我有这个:

public List<String> getPositions() {
    List<String> positions = new ArrayList<>();
    list.forEach( map -> {
        for ( Entry<String, Object> entry : map.entrySet() )
            if ( entry.getKey().toString().equals( "position" ) )
                positions.add( entry.getValue().toString() );
    } );
    return positions;
}

使用Java Stream可以更快地做到这一点吗?

1 个答案:

答案 0 :(得分:1)

据我了解您的问题,我认为list具有以下结构:

List<Map<String, Object>> listOfMap = new ArrayList<>();

Map中的这些list中的任何数字都可能具有您要用来提取值的键"position"。使用:

List<String> positions = listOfMap.stream()                         // Stream
                                  .map(map -> map.get("position"))  // Get from map a value by key
                                  .collect(Collectors.toList());    // Collect to List

我想加起来,Stream-API绝对不能像您在摘录中提供的那样代替for-loops。正如其documentation所述,它应该是非推断无状态。因此,使用Stream替换for-loop在其他位置添加元素并不是一个好主意-您必须寻找另一种方法。