Java中Reducer Stream无法运行,代码问题排查求助
问题分析与修正
你的代码存在几个关键错误,导致Stream的reduce操作无法正常工作:
reduce累加器参数类型混淆
你给reduce传入的初始值是0(int类型),所以累加器的第一个参数acc是int类型,不需要再调用Integer.parseInt(acc)——这会直接编译报错,因为parseInt仅接受String类型参数。正确逻辑是把cur(args中的String元素)转成int后,和int类型的acc相加。多余变量引发的风险
代码里提前定义的x,y,z完全无用,还会在输入参数不足3个时抛出数组越界异常,直接删除即可。整数除法的精度问题
直接用sum / args.length会触发整数除法,丢失小数部分(比如总和7、长度3时,结果会是2而非2.333...),需要转成浮点数计算才能保留精度。
修正后的代码
import java.util.stream.Stream; public class AverageNumbers { public static void main(String[] args) { // 避免空参数或除以0的异常 if (args.length == 0) { System.out.println("请输入至少一个数字"); return; } // 正确使用reduce求和:acc是累加的int值,cur转成int后累加 int sum = Stream.of(args) .reduce(0, (acc, cur) -> acc + Integer.parseInt(cur), Integer::sum); // 转成double计算平均值,保留小数精度 double average = (double) sum / args.length; System.out.println("总和:" + sum); System.out.println("平均值:" + average); } }
补充说明
- Java 8及以上版本支持数组直接调用
args.stream(),和Stream.of(args)效果一致 - 如果只需要整数平均值,直接用
int average = sum / args.length即可,但要接受精度损失
内容的提问来源于stack exchange,提问作者Mystertea
相关产品推荐
相关产品推荐

