我在玩Java8lambdas,以便轻松地收集过滤.但是我没有找到一种简明的方法来将结果作为同一语句中的新列表进行检索.以下是我到目前为止最简明的方法:

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直接由第三行赋值?

推荐答案

What you are doing may be the simplest way, provided your stream stays sequential—otherwise you will have to put a call to sequential() before forEach.

[later edit: the reason the call to sequential() is necessary is that the code as it stands (forEach(targetLongList::add)) would be racy if the stream was parallel. Even then, it will not achieve the effect intended, as forEach is explicitly nondeterministic—even in a sequential stream the order of element processing is not guaranteed. You would have to use forEachOrdered to ensure correct ordering. The intention of the Stream API designers is that you will use collector in this situation, as below.]

另一种选择是

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

Java相关问答推荐

java - 如何判断用户是否在java中的字符串中输入了正确的字符?

Jpa阅读器Spring Batch

如何管理 Wordle Game (JavaFx) 中的重复字母?

JavaFX 中的选择边框.想用 CSS 改变默认行为

Swing 从弹出表中获取用户输入

try 将 JSON 文件或字符串转换为 CSV 文件会得到一个空的 CSV 文件

Android Material TextInputLayout endIcon 截断 MaterialAutoCompleteTextView 中的文字

使用状态模式了解对象的状态

应用程序构建成功,但 IntelliJ 说我的模块没有读取其他模块

如何编写一个接收 Integer、Float、Double 列表并计算平均值的方法?

如何将二维数组收集到 Map> 中?

如何在 Java 中格式化两个 LocalDate 变量的范围?

如何为 JDK 17 编写 Github 工作流

如何遵循鲍勃叔叔的规则(建议)在一种方法中正确使用一个 try-catch 块?

使用 JUnit 和 Mockito 编写单元测试

为什么在运行 GUI 时不显示 JLabels 或 JButton?

打印所有可以使用 `+` 或 `-` 运算符给出给定数字的组合

Spring OAuth 2.0 with jersey request:输入正确凭据后响应 401 Unauthorized

迷宫 2D 递归算法死胡同问题

空手道:使用 JUnit5 的 run 者课程