我在玩Java8Lambdas来轻松过滤集合。但是,我没有找到一种简洁的方法在同一语句中检索结果作为新列表。以下是我迄今为止最简洁的方法:
列表<;长期>;sourceLongList=Arrays.asList(1L、10L、50L、80L、100L、120L、133L、333L);
列表<;长期>;targetLongList=新阵列列表<&燃气轮机;();
sourceLongList.stream().filter(l->;l>;100).forEach(targetLongList::add);
网上的例子并没有回答我的问题,因为它们没有生成新的结果列表就停止了。必须有一种更简洁的方式。我本以为流类有toList(),toSet()
是否有一种方法可以通过第三行直接分配变量targetLongList
如果您的流保持顺序,您所做的可能是最简单的方法&mdash;否则,您必须在forEach之前调用sequential()
[稍后编辑:需要调用sequential()的原因是代码本身(forEach(targetLongList::add))如果流是并行的,则会很快。即使这样,它也不会达到预期的效果,因为forEach显然是不确定的&mdash;即使在顺序流中,元素处理的顺序也无法保证。您必须使用forEachOrdered来确保正确的顺序。流API设计的意图是gners建议您在这种情况下使用收集器,如下所示。]
另一种选择是
targetLongList=sourceLongList.stream()
.过滤器(l->;l>;100)
.collect(Collectors.toList());