在java 8中从java.util.stream.stream检索列表

我在玩Java8Lambdas来轻松过滤集合。但是,我没有找到一种简洁的方法在同一语句中检索结果作为新列表。以下是我迄今为止最简洁的方法:

列表<长期>sourceLongList=Arrays.asList(1L、10L、50L、80L、100L、120L、133L、333L);
列表<长期>targetLongList=新阵列列表&lt&燃气轮机;();
sourceLongList.stream().filter(l->l>100).forEach(targetLongList::add);

网上的例子并没有回答我的问题,因为它们没有生成新的结果列表就停止了。必须有一种更简洁的方式。我本以为类有toList()toSet()

是否有一种方法可以通过第三行直接分配变量targetLongList

如果您的流保持顺序,您所做的可能是最简单的方法—否则,您必须在forEach之前调用sequential()

[稍后编辑:需要调用sequential()的原因是代码本身(forEach(targetLongList::add))如果流是并行的,则会很快。即使这样,它也不会达到预期的效果,因为forEach显然是不确定的—即使在顺序流中,元素处理的顺序也无法保证。您必须使用forEachOrdered来确保正确的顺序。流API设计的意图是gners建议您在这种情况下使用收集器,如下所示。]

另一种选择是

targetLongList=sourceLongList.stream()
.过滤器(l->l>100)
.collect(Collectors.toList());

发表评论