使用flatMap处理包含多个列表的列表

4

如果我有一个 List<List<Foo>>,我可以使用 flatMap 将列表展平。但是,我的 MyClass 有一个 List<Foo>,而 Foo 类有一组 bars 的列表 List<Bar>,那么我必须这样做:

myClass.getFoos().stream().map(Foo::getBars).forEach({
    bar -> // some code
});

在这种情况下,是否可以使用flat map,以便我一次性从MyClass中获取酒吧列表。

2个回答

3
myClass.getFoos()
        .stream() 
        .flatMap(x -> x.getBars().stream())
        .forEach(...)

3

试试这个:

myClass.getFoos().stream()
    .map(Foo::getBars)
    .flatMap(List::stream) // flatten the lists
    .forEach(...);

请注意方法引用的独占使用,我发现它比lambda更整洁和易读。


太好了,我不知道在 map 之后还可以使用 flatMap。 - fastcodejava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接