如何在java中获取DoubleStream的Kth最大元素

时间:2017-10-19 03:58:02

标签: java java-8 java-stream

在java中获取DoubleStream中第K个最大元素的最佳方法是什么?

我知道我们可以做.max()。getDouble()来获取最大元素。

4 个答案:

答案 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());