【发布时间】:2021-01-05 17:08:17
【问题描述】:
如果前一个过滤器返回一个空流,希望想出一种方法来对原始流应用过滤器。例如:
- 给定一个数字流
- 获取并返回所有偶数
- 如果没有,获取并返回所有是 3 的倍数的数字
- 如果没有,则获取并返回所有为 5 的倍数的数字
- 等等..
一个简单的方法是:
List<Integer> numbers = ...
List<Integer> filteredNums = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
if (filteredNums.isEmpty()) {
filteredNums = numbers.stream()
.filter(n -> n % 3 == 0)
.collect(Collectors.toList());
}
if (filteredNums.isEmpty()) {
filteredNums = numbers.stream()
.filter(n -> n % 5 == 0)
.collect(Collectors.toList());
}
给定一个数字列表,例如 1、3、5、15、21,将得到 3、15、21。
我的数字示例是我正在尝试做的简化版本,但传达了相同的概念。我可以创建一个收集器来执行此操作,但总的来说,我觉得我缺少一些简单的东西。理想情况下,我希望该解决方案能够在流中使用,以便我可以继续对其执行其他流操作。在这种情况下,也许我想将其减少为一个总和或映射,其中我将每个数字相乘并将收集到一个列表中。
【问题讨论】:
标签: java java-stream