平面地图和清单清单的使用

时间:2018-10-09 20:47:48

标签: java-8 java-stream flatten

如果我有List<List<Foo>>,则可以使用平面地图来平铺列表。 但是我有MyClass,它有一个List<Foo>,而Foo类有酒吧列表List<Bar>,那么我必须做这样的事情:

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

在这种情况下是否可以使用平面地图,所以我可以一次拍摄MyClass中的条形图。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

尝试一下:

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

请注意方法引用的大量使用,与lambda相比,我发现它更整洁且易于阅读。