gpt4 book ai didi

java-8 - 列表的列表和 Java 8

转载 作者:行者123 更新时间:2023-12-02 03:18:41 24 4
gpt4 key购买 nike

我有一个 R 类列表以及其他 P 类列表

List<R> rList = getRListFromDb();

我想获取另一个列表中的所有 P 对象

List<P> result = new ArrayList<>();

我尝试了这些,但给了我 Class 强制转换异常,说 P 类无法转换为 R 类。顺便说一句,我看到了下面给出的问题,但尝试过但无法弄清楚。

How can I turn a List of Lists into a List in Java 8?

1. rList.stream().map(R::getP).flatMap(List::stream).forEach(result::addAll);
2. rList.forEach(r -> result.addAll(r.getP()));

我想知道这里有什么不正确的地方,也想知道在 Java 8 中完成此操作的不同方法。

最佳答案

rList.stream().map(R::getP).flatMap(List::stream).forEach(result::addAll);

如果你不使用 flatMap 就可以工作(因为 addAll 需要 Collection ,但是 flatMap 将您的 Stream<List<P>> 转换为 Stream<P>

这会起作用:

rList.stream().map(R::getP).forEach(result::addAll);

flatMap应该是:

rList.stream().map(R::getP).flatMap(List::stream).forEach(result::add);

也就是说,正确的方法是使用 collect :

List<P> result = rList.stream()
.map(R::getP)
.flatMap(List::stream)
.collect(Collectors.toList());

List<P> result = rList.stream()
.flatMap(r -> r.getP().stream())
.collect(Collectors.toList());

关于java-8 - 列表的列表和 Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com