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

Jak*_*ter 14 java java-8

我有这样的课

public class Example {
    private List<Integer> ids;

    public getIds() {
        return this.ids; 
    }
}
Run Code Online (Sandbox Code Playgroud)

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

List<Example> examples;
Run Code Online (Sandbox Code Playgroud)

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

List<Integer> concat = examples.stream().map(Example::getIds).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

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

使用Java 8 stream api获得此功能的正确方法是什么?

And*_*ner 26

用途flatMap:

List<Integer> concat = examples.stream()
    .flatMap(e -> e.getIds().stream())
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • @ CraigR8806广泛的解释[这里](http://stackoverflow.com/questions/26684562/whats-the-difference-between-map-and-flatmap-methods-in-java-8) (5认同)

hol*_*ava 6

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

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