如何使用Java Stream从整数列表中筛选出质数
质数筛选单Stream实现方案
完全可以仅通过单个return语句结合Stream流完成质数筛选需求,只需要将原有筛选偶数的filter逻辑替换为质数判断规则即可,优化后的代码如下:
import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; public class PrimeFilter { public static List<Integer> primeNumbers(List <Integer> list) { return Optional.ofNullable(list) .orElse(Collections.emptyList()) .stream() .filter(Objects::nonNull) .filter(i -> { // 小于2的数不是质数 if (i < 2) return false; // 2是唯一的偶质数 if (i == 2) return true; // 大于2的偶数都不是质数 if (i % 2 == 0) return false; // 仅判断到平方根范围内的奇数是否能整除当前数 for (int j = 3; j * j <= i; j += 2) { if (i % j == 0) return false; } return true; }) .toList(); } }
逻辑说明
- 保留了原有代码的入参空列表容错、空元素过滤逻辑,兼容性不变
- 质数判断逻辑做了效率优化:提前排除偶数、仅遍历到数值平方根,避免不必要的计算
- 如果你希望代码更简洁易读,也可以把质数判断逻辑抽成单独的
Predicate<Integer>方法,直接在filter中引用方法即可,仍然可以保持单return的写法。
内容的提问来源于stack exchange,提问作者human
相关产品推荐
相关产品推荐

