如何使用Java Streams实现特定条件下的数值求和?
Java Streams实现特定条件下A列数值求和
数据示例
| A | B | C |
|---|---|---|
| 33 | 6 | 0 |
| 79 | 6 | 8 |
| 13 | 4 | 0 |
| 12 | 6 | 0 |
| K100 | 6 | 0 |
需求说明
仅当B值等于6且C值等于0时,对A列的值求和,结果应为33 + 12 + 100 = 145。其中A列的值可能包含字母(如K100),需忽略字母部分,按对应数字(K100视为100)处理。
完整实现代码
answer += someObj.someList() // answer最终应为145 .stream() .filter(e -> e != null && e.getB() == 6 && e.getC() == 0) .mapToInt(e -> { // 提取A字段中的纯数字部分 String numStr = e.getA().replaceAll("[^0-9]", ""); // 转换为整数,若提取后无数字则返回0(可选容错处理) return numStr.isEmpty() ? 0 : Integer.parseInt(numStr); }) .sum();
代码说明
- 过滤阶段:通过
filter筛选出非空、B=6且C=0的元素,确保只处理符合条件的数据。 - 转换阶段:使用
mapToInt将A字段的字符串转换为整数:- 利用正则表达式
[^0-9]匹配所有非数字字符,替换为空后得到纯数字字符串; - 加入空字符串判断,避免纯字母的A字段引发
NumberFormatException。
- 利用正则表达式
- 求和阶段:调用
sum()方法对所有转换后的整数求和,结果累加到answer变量中。
内容的提问来源于stack exchange,提问作者Tom1998
相关产品推荐
相关产品推荐

