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

标签 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());

我也想通过给定的键过滤结果。

最佳答案

你的意思是:

List<String> valueList = mapList.stream()
        .flatMap(a -> a.values().stream())
        .collect(Collectors.toList());

编辑

What if I want to specify a key e.g. I have "id" and "firstName", but only want "firstName"

在这种情况下,您可以在 flatmap 之后使用 filter,如下所示:

List<String> valueList = mapList.stream()
        .flatMap(a -> a.entrySet().stream())
        .filter (e -> e.getKey().equals("firstName"))
        .map(Map.Entry::getValue)
        .collect(Collectors.toList ());

关于java - 从 List<Map<String,String>> 中提取值(不是键),并将其展平为 List<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644868/

相关文章:

java - Java 的 Collectors.toSet() 是否保证允许空值?

java - 通过 JNI 对 C 和 Java 代码使用互斥锁或其他同步方法

python - 这两种初始化数组的方式有什么区别?

Java 列出问题

python - 检查三个列表中的公共(public)元素 : it checks for identical lists instead

java - 使用 Java 8 流 API 和 lambda 操作 map

java - ClasscastException 合并两个 LinkedHashMap

java - 是否存在跨 JVM 的 Java 信号量?

java - 如何获取某些 Java 包中的文件路径?

java - Java 中复合赋值(+=、-=、*=、...)的混淆