从List <map <string,string>&gt;中提取值(而不是键),并将其展平为List <string>

时间:2018-06-01 13:46:23

标签: java list java-8 java-stream

如何从List<Map<String,String>>中提取值(而不是键),并将其展平为List<String>

即。尝试了以下但不起作用。

List<Map<String,String>> mapList = .... ;

List<String> valueList = mapList.stream()
                                .map(o -> o.getValue())
                                .collect(Collectors.toList());

我也希望按给定的键过滤结果。

4 个答案:

答案 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<>