使用 Java 8 Stream API 从对象列表中收集列表

2022-09-01 15:16:01

我有一个这样的班级

public class Example {
    private List<Integer> ids;

    public getIds() {
        return this.ids; 
    }
}

如果我有一个像这样的类对象列表

List<Example> examples;

如何将所有示例的 id 列表映射到一个列表中?我试过这样:

List<Integer> concat = examples.stream().map(Example::getIds).collect(Collectors.toList());

但得到一个错误Collectors.toList()

使用Java 8流api实现这一目标的正确方法是什么?


答案 1

用:flatMap

List<Integer> concat = examples.stream()
    .flatMap(e -> e.getIds().stream())
    .collect(Collectors.toList());

答案 2

使用方法引用表达式而不是 lambda 表达式的另一种解决方案:

List<Integer> concat = examples.stream()
                               .map(Example::getIds)
                               .flatMap(List::stream)
                               .collect(Collectors.toList());

推荐