gpt4 book ai didi

java - 扁平化列表列表的 3 种方法。有理由更喜欢其中之一吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:39:49 24 4
gpt4 key购买 nike

假设我们有一个列表如下。 CoreResult有一个类型为 List<Double> 的字段.

final List<CoreResult> list = new LinkedList<>(SOME_DATA);

目标是在从每个 CoreResult 中提取该特定字段后展平列表目的。这里有 3 个可能的选项。他们中的任何一个比其他人更可取吗?

选项 1:通过 map() 提取字段并压平内部收集器

final List<Double> A = list.stream().map(CoreResult::getField)
.collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);

选项 2:通过 map() 提取字段, 通过 flatMap() 展平, 简单的收集器

final List<Double> B = list.stream().map(CoreResult::getField)
.flatMap(Collection::stream).collect(Collectors.toList());

选项 3:通过 flatMap() 一次性提取字段并展平, 简单的收集器

final List<Double> C = list.stream().flatMap(
x -> x.getField().stream()).collect(Collectors.toList());

如果不需要从 CoreResult 中提取任何字段,答案是否会有所不同,而只是想简单地展平 List<List<Double>>

最佳答案

我不确定每一个的性能,但是 java 流使用的构建器模式的一个重要方面是它允许可读性。我个人认为选项 2 最易读。选项 3 也不错。我会避免选项一,因为它有点“欺骗”集合的扁平化。

将每个方法放在自己的行中,并确定哪个最直观易读。我更喜欢第二个:

final List<Double> B = list.stream()
.map(CoreResult::getField)
.flatMap(Collection::stream)
.collect(Collectors.toList());

关于java - 扁平化列表列表的 3 种方法。有理由更喜欢其中之一吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39019857/

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