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

时间:2017-04-28 14:02:41

标签: java java-8

我有一个这样的课程

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 stream api获得此功能的正确方法是什么?

2 个答案:

答案 0 :(得分:19)

使用flatMap

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

答案 1 :(得分:3)

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

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