我有一张地图清单:
List<Map<String, Object>>
地图由键name
和position
组成。
我需要从列表的所有映射中检索键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
可以更快地做到这一点吗?
答案 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
在其他位置添加元素并不是一个好主意-您必须寻找另一种方法。