Java 8 : Convert a map with string values to a list containg a different type

标签 java java-8 java-stream map-function

我有这个Map :

Map<Integer, Set<String>> map = ...

我有这门课Foo :

class Foo {
    int id;
    String name;
}

我想将 map 转换为 List<Foo> . Java 8 中是否有方便的方式来执行此操作?

目前我的做法是:

List<Foo> list = new ArrayList<>((int) map.values().flatMap(e->e.stream()).count()));

for(Integer id : map.keySet()){
    for(String name : map.get(id)){
        Foo foo = new Foo(id,name);
        list.add(foo);  
    }
}

我觉得太麻烦了。

最佳答案

您可以拥有以下内容:

List<Foo> list = map.entrySet()
                    .stream()
                    .flatMap(e -> e.getValue().stream().map(name -> new Foo(e.getKey(), name)))
                    .collect(toList());

对于映射的每个条目,我们创建一个值的 Stream 并将其映射到相应的 Foo,然后使用 flatMap 将其展平。

关于Java 8 : Convert a map with string values to a list containg a different type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939641/

相关文章:

java - Android 中存储的可绘制对象发生变化

java - 将元素添加到 LinkedHashMap 中的 ArrayList [Android]

java - 在执行 Java 流时跟踪结果?

java - 将这两个 Java 流合并为一个

java - 我正在按反向或自然顺序对 java 中的日期列表进行排序,但它是按年份分组的

java - Base64 输入流转字符串

java - 根据操作系统分别运行 .bat 文件和 .sh 文件

java - 如何将 sourceCompatability 设置为 javaVersion.VERSION_1_8

android - 如何重构我的代码以支持 java 8 的新功能,例如实例方法的 'method references'?

java - 使用 Optional 时遇到 NullPointerException