小编典典

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

all

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

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有没有办法可以通过第三行直接分配变量?


阅读 108

收藏
2022-03-14

共1个答案

小编典典

您正在做的可能是最简单的方法,前提是您的流保持顺序 - 否则您将不得不在forEach.

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

另一种选择是

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