使用Java Stream API计算中位数

乔·H

是否可以使用Java Stream API查找数字集合的中位数?我有一个List<Double>未排序的类型的变量

从JDK9到14的javadocs似乎表明这median()不是的有效方法DoubleStream平均值,最小值,最大值,计数和总和是有效的聚合函数。

median()不是有效方法,因为它需要在流传输之前进行排序的Collection?

这适用于average()

   // Function to find average element from a List of Integers in Java 9 and above
   public static Double getAverageWithStream(List<Double> list) {
      OptionalDouble average = list.stream() // Stream<Double>
                                 .mapToDouble(v -> v) // DoubleStream
                                 .average(); // OptionalDouble

      // Print out a message about the 'average' variable's value
      // Note: ifPresentOrElse() was introduced in JDK9
      average.ifPresentOrElse(
         // message the value if one exists
         (value) -> {
            System.out.println("The average value is " + value);
         },
         // Alert the user that there is no value
         () -> {
            System.out.println("No average could be determined!");
         }
      ); // end ifPresentOrElse()

      return average.orElse(Double.NaN);
   } // end getAverageWithStream()
乔·H

根据@Robert Bain留下的评论,我的方法需要按以下方式进行更改以支持中位数聚合:

   /**
    * Function to find median element from a List of Integers in Java 9 and above
    * @param list List<Double>
    * @return Double
    */
   public static Double getMedianWithStream(List<Double> list) {
      DoubleStream sortedNumbers = list.stream() // Stream<Double>
                                 .mapToDouble(v -> v) // DoubleStream
                                 .sorted(); // DoubleStream sorted

      OptionalDouble median = (
         list.size() % 2 == 0 ?
         sortedNumbers.skip((list.size() / 2) - 1)
                     .limit(2)
                     .average() :
         sortedNumbers.skip(list.size() / 2)
                     .findFirst()
      );

      // Print out a message about the 'average' variable's value
      // Note: ifPresentOrElse() was introduced in JDK9
      median.ifPresentOrElse(
         // message the value if one exists
         (value) -> {
            System.out.println("The median value is " + value);
         },
         // Alert the user that there is no value
         () -> {
            System.out.println("No median could be determined!");
         }
      ); // end ifPresentOrElse()

      return median.orElse(Double.NaN);
   } // end getAverageWithStream()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++使用参考计算中位数

来自分类Dev

使用SQL计算列的中位数

来自分类Dev

使用聚合计算中位数

来自分类Dev

在AWS Redshift中使用分组依据计算中位数

来自分类Dev

使用SQL计算中位数(DB2)

来自分类Dev

使用不同的表计算SQL查询中的中位数

来自分类Dev

如何使用outer()计算每个向量之间的中位数?

来自分类Dev

尝试使用R计算中位数时出现问题

来自分类Dev

如何使用R计算成为列表中位数的概率?

来自分类Dev

使用不同的表计算SQL查询中的中位数

来自分类Dev

MySQLi,声明变量并使用数学计算中位数

来自分类Dev

使用SQL计算中位数(DB2)

来自分类Dev

中位数Java实现的中位数

来自分类Dev

Java,使用 Math.random 时计算中位数和平均值

来自分类Dev

使用Java Stream API进行分层过滤

来自分类Dev

使用日期索引计算pandas DataFrame的3个月滚动中位数

来自分类Dev

Pyspark-使用groupby计算中位数绝对百分比误差

来自分类Dev

如何在ROR中使用Arel计算中位数,导数,方差等?

来自分类Dev

使用日期索引计算pandas DataFrame的3个月滚动中位数

来自分类Dev

使用数据子集时如何在data.table中创建新列并计算中位数

来自分类Dev

Java Stream API-计算嵌套列表的项目

来自分类Dev

使用Java8 Stream计算列表中的对象数

来自分类Dev

如何使用Python Dataframe API在Apache Spark中找到中位数?

来自分类Dev

仅使用DAX中的度量来计算每个产品的平均变化百分比中位数

来自分类Dev

使用Java 8 Stream API合并地图列表

来自分类Dev

使用Java 8 Stream API查找枚举值

来自分类Dev

使用Java 8 Stream API展平地图并关联值

来自分类Dev

Java:使用Stream API从原始数组制作列表

来自分类Dev

Java Stream API:如何使用方法引用?

Related 相关文章

  1. 1

    C ++使用参考计算中位数

  2. 2

    使用SQL计算列的中位数

  3. 3

    使用聚合计算中位数

  4. 4

    在AWS Redshift中使用分组依据计算中位数

  5. 5

    使用SQL计算中位数(DB2)

  6. 6

    使用不同的表计算SQL查询中的中位数

  7. 7

    如何使用outer()计算每个向量之间的中位数?

  8. 8

    尝试使用R计算中位数时出现问题

  9. 9

    如何使用R计算成为列表中位数的概率?

  10. 10

    使用不同的表计算SQL查询中的中位数

  11. 11

    MySQLi,声明变量并使用数学计算中位数

  12. 12

    使用SQL计算中位数(DB2)

  13. 13

    中位数Java实现的中位数

  14. 14

    Java,使用 Math.random 时计算中位数和平均值

  15. 15

    使用Java Stream API进行分层过滤

  16. 16

    使用日期索引计算pandas DataFrame的3个月滚动中位数

  17. 17

    Pyspark-使用groupby计算中位数绝对百分比误差

  18. 18

    如何在ROR中使用Arel计算中位数,导数,方差等?

  19. 19

    使用日期索引计算pandas DataFrame的3个月滚动中位数

  20. 20

    使用数据子集时如何在data.table中创建新列并计算中位数

  21. 21

    Java Stream API-计算嵌套列表的项目

  22. 22

    使用Java8 Stream计算列表中的对象数

  23. 23

    如何使用Python Dataframe API在Apache Spark中找到中位数?

  24. 24

    仅使用DAX中的度量来计算每个产品的平均变化百分比中位数

  25. 25

    使用Java 8 Stream API合并地图列表

  26. 26

    使用Java 8 Stream API查找枚举值

  27. 27

    使用Java 8 Stream API展平地图并关联值

  28. 28

    Java:使用Stream API从原始数组制作列表

  29. 29

    Java Stream API:如何使用方法引用?

热门标签

归档