gpt4 book ai didi

java - 从 Java 8 中的 java.util.stream.Stream 检索列表

转载 作者:行者123 更新时间:2023-12-03 03:55:57 25 4
gpt4 key购买 nike

我正在使用 Java 8 lambda 来轻松过滤集合。但我没有找到一种简洁的方法来在同一语句中将结果检索为新列表。这是迄今为止我最简洁的方法:

List<Long> sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L);
List<Long> targetLongList = new ArrayList<>();
sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add);

网上的示例没有回答我的问题,因为它们停止时没有生成新的结果列表。一定有更简洁的方法。我本以为 Stream 类具有 toList()toSet()、...

等方法

有没有办法让第三行直接给变量targetLongList赋值?

最佳答案

您正在做的可能是最简单的方法,前提是您的流保持顺序 - 否则您将必须在 forEach 之前调用equential()。

[稍后编辑:调用顺序()是必要的原因是,如果流是并行的,则代码(forEach(targetLongList::add))将是活泼的。即使这样,它也不会达到预期的效果,因为 forEach 是明确不确定的 - 即使在顺序流中,也无法保证元素处理的顺序。您必须使用 forEachOrdered 来确保正确的排序。 Stream API 设计者的意图是您将在这种情况下使用收集器,如下所示。]

另一种选择是

targetLongList = sourceLongList.stream()
.filter(l -> l > 100)
.collect(Collectors.toList());

关于java - 从 Java 8 中的 java.util.stream.Stream 检索列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830313/

25 4 0