如何从List<Map<String,String>>
中提取值(而不是键),并将其展平为List<String>
?
即。尝试了以下但不起作用。
List<Map<String,String>> mapList = .... ;
List<String> valueList = mapList.stream()
.map(o -> o.getValue())
.collect(Collectors.toList());
我也希望按给定的键过滤结果。
答案 0 :(得分:4)
你的意思是:
List<String> valueList = mapList.stream()
.flatMap(a -> a.values().stream())
.collect(Collectors.toList());
修改强>
如果我想指定密钥,该怎么办?我有“id”和“firstName”,但是 只想要“firstName”
在这种情况下,您可以在filter
之后使用flatmap
,如此:
List<String> valueList = mapList.stream()
.flatMap(a -> a.entrySet().stream())
.filter (e -> e.getKey().equals("firstName"))
.map(Map.Entry::getValue)
.collect(Collectors.toList ());
答案 1 :(得分:2)
使用.flatMap
:
List<Map<String,String>> mapList = new ArrayList<>();
Map<String, String> mapOne = new HashMap<>();
mapOne.put("1", "one");
mapOne.put("2", "two");
Map<String, String> mapTwo = new HashMap<>();
mapTwo.put("3", "three");
mapTwo.put("4", "four");
mapList.add(mapOne);
mapList.add(mapTwo);
List<String> allValues = mapList.stream()
.flatMap(m -> m.values().stream())
.collect(Collectors.toList()); // [one, two, three, four]
答案 2 :(得分:2)
尝试
List<String> valueList = mapList.stream()
.flatMap(map -> map.entrySet().stream())
.filter(entry -> entry.getKey().equals("KEY"))
.map(Map.Entry::getValue)
.collect(Collectors.toList());
答案 3 :(得分:1)
您尝试映射到o.getValue()的对象是Map类型(它没有函数getValue()),而不是Map.Entry(它将具有这样的函数)。你可以通过函数o.values()来获得值的集合。
然后,您可以从该集合中获取Stream,并将生成的Streams流平整为:
ArrayList<>