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

新手上路,请多包涵

我有这样的课程

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 实现此目的的正确方法是什么?

原文由 Jakob Abfalter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 419
2 个回答

使用 flatMap

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

原文由 Andy Turner 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 holi-java 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题