java - 我如何使用 flatMap 实现此目的

标签 java java-8 java-stream flatmap

我需要创建一个新的内部列表并使用它来设置外部列表。我该怎么做才能使用 flatMap。 fooList 是 FooDb 对象的列表,我从中创建 Foo 对象的列表。

final ArrayList<FooDb> fooList= getFooFromDB();    
final ArrayList<Foo> foos = new ArrayList<>();
            fooList.forEach(foo -> {
                final ArrayList<Bar> bars = new ArrayList<>();
                item.getItems()
                    .forEach(item -> bars.add(new Bar(foo.getId(), foo.getName())));
                foos.add(new Foo(0L, foo.getId(), bars));
            });

最佳答案

你不需要flatMap .你有两个 map操作:

  1. List<Item> -> List<Foo(..., ..., List<Bar>)> , 和
  2. List<Item> -> List<Bar>这是前者所必需的。

List<Foo> foos = 
    itemsList.stream()
             .map(item -> new Foo(0L, item.getId(), item.getItems()
                                                        .stream()
                                                        .map(i -> new Bar(i.getId(), i.getName()))
                                                        .collect(Collectors.toList())))
             .collect(Collectors.toList());

糟糕的格式,我已经使用 Stream API 好几年了,从来没有写出好看的链。随意编辑。

关于java - 我如何使用 flatMap 实现此目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58130844/

相关文章:

java - 并行计算集合的所有排列

java - 忽略 Mockito 中测试方法内部的无效方法

java - (Java)尝试使用(工作)动画类对硬币数组列表进行动画处理

Java 8 可选用法

java - 如何从键的 Map<K,V> 和 List<K> 创建 List<T>?

Java Stream Api 反转数据结构并标准化变量

java - 如何在Java中使用ThreadLocalRandom.current().ints(int,int)来查找与特定表达式匹配的特定数字?

java - 在 MATLAB 外部运行 MATLAB 函数时 MatlabControl 中出现异常

java - gradle 4.9-gradlew和Java 10仍然获得:无法从 '10'确定Java版本

java - 部署后无法访问 Google App Engine 中的 Spring Boot 应用程序