【发布时间】:2020-05-09 18:58:39
【问题描述】:
是否可以使用 Java Stream API 来查找数值集合的中位数?我有一个未排序的List<Double> 类型的变量。
从 JDK9 到 14 的 javadocs 似乎表明 median() 不是 DoubleStream 的有效方法。
不过,Average、Minimum、Maximum、Count 和 Sum 都是有效的聚合函数。
median() 是不是一个有效的方法,因为它在流式传输之前需要一个排序的集合?
这适用于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()
【问题讨论】:
标签: java