【问题标题】:How to get average in Java [closed]如何在 Java 中获得平均值 [关闭]
【发布时间】:2020-10-07 14:10:50
【问题描述】:

如何在java中使用函数式编程获得平均值?

这是我尝试过的......

它似乎在IntStream.of 不起作用 我想从数组的特定行中获取平均值

 public static void average(List<List<String>> rows){
     IntStream stream = IntStream.of(e -> Integer.parseInt(e.get(2))); 

   
    OptionalDouble obj = stream.average(); 

 
    if (obj.isPresent()) { 
        System.out.println(obj.getAsDouble()); 
    } 
    else { 
        System.out.println("-1"); 
 
    }
 }
  

rows 是数组,是从 excel 文件中读取的行。

【问题讨论】:

  • 什么是List&lt;List&lt;String&gt;&gt;?你有一个包含字符串列表的列表吗?
  • 不清楚你想要的平均值... 每个列表的第 9 个元素?如果是这样,您需要先映射每个列表
  • 只是说:要非常小心地使用并行()。这个简单的调用带来了大量的开销。您需要处理数千个对象才能支付(就延迟而言)。对于较小的数据集,您会浪费 CPU 周期,并且在使用并行流时最终会变慢。

标签: java average


【解决方案1】:

Stream.of(elem1, elem2) 使用所述元素创建一个流。

想象你有一个盒子,里面有 100 张照片。

如果你执行Stream.of(box),你会得到一个boxes流,返回1个box。

您想要的是照片流。为此,您需要box.stream(),而不是Stream.of(box)

那么你的下一个问题是你似乎不明白 reduce 是做什么的。你需要告诉系统如何整合两个结果,而不仅仅是如何得到一个结果。

你想要的不是首先减少,你想将给定的'foto'(在你的情况下是一个字符串列表)映射到一个整数,这不仅需要 e.get(),还需要一个Integer.parseInt,你想要map,而不是reduce

【讨论】:

  • 是的,我想真正的答案是:这个人不知道他们在做什么。他们应该先阅读一些关于流的好教程......
  • 实际上,他们需要mapToInt 而不是map。平均返回一个OptionalDouble,所以你可能也想解决这个花絮。
  • 是的,我的错不知道如何解释这个问题......没关系解决它..谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 2017-08-02
  • 2012-03-18
  • 2022-08-14
相关资源
最近更新 更多