我如何使用 flatMap 实现此目的
How do I achieve this using a 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
操作:
List<Item> -> List<Foo(..., ..., List<Bar>)>
,以及
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 几年了,从来没有写出好看的链。欢迎编辑。
你不需要 FlatMap 来做这件事。 FlatMap 通常必须用于扁平化数组的内容。在这种情况下,您需要 1 对 1 映射,因此正确的方法是映射函数。
itemsList
.stream()
.map(item -> new Foo(0L,item.getId, item
.getItems()
.stream()
.map(item -> new Bar(item.getId(),item.getName())).collect(toList())));
我需要创建一个新的内部列表并使用它来设置外部列表。我该怎么做才能使用 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
操作:
List<Item> -> List<Foo(..., ..., List<Bar>)>
,以及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 几年了,从来没有写出好看的链。欢迎编辑。
你不需要 FlatMap 来做这件事。 FlatMap 通常必须用于扁平化数组的内容。在这种情况下,您需要 1 对 1 映射,因此正确的方法是映射函数。
itemsList
.stream()
.map(item -> new Foo(0L,item.getId, item
.getItems()
.stream()
.map(item -> new Bar(item.getId(),item.getName())).collect(toList())));