无法让 reducer 流在 Java 中工作。我的代码有什么问题?

问题描述 投票:0回答:1

我想使用 reducer 来总结来自“args”的所有输入,然后除以 args 长度以获得我正在寻找的结果(只是一个学习 java 的简单函数)。

我正在按照(据我所知)我能找到的关于让流库工作的每个教程中的说明进行操作,但仍然没有成功。 TY 在高级方面有任何帮助。

public class AverageNumbers { 
   public static void main(String[] args) { 
     int x = Integer.parseInt(args[0]); 
     int y = Integer.parseInt(args[1]); 
     int z = Integer.parseInt(args[2]); 

     int sum = args.stream().reduce(0, (acc, cur) -> Integer.parseInt(acc) + Integer.parseInt(cur), Integer::sum); 
  
     // int math = sum / args.length; 

     System.out.println(sum); 
   } 
} 

我试过:

  1. 导入 java.utils.stream 函数
  2. 将流重写为 Stream.of(args)
  3. 重写流以返回字符串以减少类型转换的潜在复杂性
java functional-programming java-stream
1个回答
2
投票

数组上没有

.stream()
方法。

您可以改为执行以下操作:

  1. 使用
    Arrays.stream
    String
    获取
    args
    流。
  2. 使用
    mapToInt
    Integer.parseInt
    得到一个
    IntStream
    .
  3. 直接调用
    sum
    方法(存在于
    IntStream
    )获取总数
int sum = Arrays.stream(args).mapToInt(Integer::parseInt).sum();
double average = 1d * sum / args.length;
// Multiplying by the double value 1 is necessary to prevent integer division

平均值也可以直接通过

IntStream#average
获得。

double average = Arrays.stream(args).mapToInt(Integer::parseInt).average().orElseThrow();

Collectors.averagingInt

double average = Arrays.stream(args).collect(Collectors.averagingInt(Integer::parseInt));
© www.soinside.com 2019 - 2024. All rights reserved.