在java中获取DoubleStream中第K个最大元素的最佳方法是什么?
我知道我们可以做.max()。getDouble()来获取最大元素。
答案 0 :(得分:2)
OptionalDouble kthLargest = stream
.map(i -> -i) // Trick to sort in reverse order
.sorted()
.distinct() // Remove duplicates
.map(i -> -i)
.skip(k - 1)
.findFirst();
答案 1 :(得分:2)
Let evalStr = ""
For(let element of messageArray){
evalStr += element + " "
}
eval(evalStr)
如果流中的元素少于k个,则会给出k th 最大元素,或doubleStream.boxed()
.sorted(Comparator.reverseOrder())
.skip(k - 1)
.findFirst()
.orElse(null);
。
答案 2 :(得分:0)
对流进行排序,将其转换为数组并获取array.length-k中的项目。
示例:
private static double getKth(DoubleStream ds, int k) {
double[] array = ds
.sorted()
.toArray();
return array[array.length-k];
}
您应该添加验证以确保k
具有合法值
答案 3 :(得分:-1)
获得DoubleStream
后,按相反顺序(DESC)设为sorted()
。然后limit(k)
并对ASC进行排序并获取first
。
.boxed()
.distinct() //in case you want to ignore repeating values
.sorted(Comparator.reverseOrder())
.limit(k)
.sorted()
.findFirst());