2017-10-19 11 views
0

JavaのDoubleStreamでK番目に大きい要素を取得する最良の方法は何ですか?JavaでDoubleStreamのK番目に大きな要素を取得する方法

最大の要素を取得するには、.max()。getDouble()を使用できます。

+2

あなたはそれを検索しようとしましたか?さまざまなデータ構造でk番目に大きい要素を見つけることに対処する質問がたくさんあります。 – Henry

+2

[No code](http://idownvotedbecau.se/nocode)と[試みません](http://idownvotedbecau.se/noattempt)については、[ask]を参照してください。 – Alex

+0

[O(n)の長さnのソートされていない配列のk番目に大きい要素を見つける方法](https://stackoverflow.com/questions/251781/how-to-find-the-kth-largest -element-in-an-sort-length-n-in-on) – geocar

答えて

1
doubleStream.boxed() 
      .sorted(Comparator.reverseOrder()) 
      .skip(k - 1) 
      .findFirst() 
      .orElse(null); 

ストリームにおけるk未満の要素がある場合は、あなたのk 番目の最大の要素、またはnullを与えるだろう。

0

ストリームをソートし、配列に変換し、array.length-kで項目を取得します。

例:

private static double getKth(DoubleStream ds, int k) { 
    double[] array = ds 
     .sorted() 
     .toArray(); 
    return array[array.length-k]; 
} 

あなたがDoubleStreamを持っていたらkは、合法的な値

+0

または、 '.toArray();の代わりにskipとlimitを使用してください – c0der

+0

@ c0derいくつかのコードを表示していますか? – alfasin

+0

私は試してみます(私はダウン投票者ではありません) – c0der

-1

を持っていることを確認する検証を追加する必要があり、その逆の順番(DESC)でsorted()します。次にlimit(k)とASCを並べ替えて、firstにします。

.boxed() 
.distinct() //in case you want to ignore repeating values 
.sorted(Comparator.reverseOrder()) 
.limit(k) 
.sorted() 
.findFirst()); 
+1

最大の代わりにk番目に小さい要素を返します。 – ZhekaKozlov

+1

リストが重複してn番目の番号まで見つかったとしたら、2番目に大きい配列を見つけたいとし、配列は2,1,6,6 でソートすると6,6,2,1となり、2番目に6それは真実ではありません –

+0

@xenteros 'k'最小限の要素を制限します – ZhekaKozlov

2
OptionalDouble kthLargest = stream 
     .map(i -> -i) // Trick to sort in reverse order 
     .sorted() 
     .distinct() // Remove duplicates 
     .map(i -> -i) 
     .skip(k - 1) 
     .findFirst(); 
+0

@Holgerストリームは 'k'個未満の要素を含む可能性があります – ZhekaKozlov

+0

@Holgerこのソリューションは、ボックス化されたストリームを使用してソートされたストリームを使用するよりも読み込みが容易になります。 –

+2

@Malte Hartwig:ストリームのサイズと実装に依存します。 AFAIKは、現在の実装で 'distinct()'を使用すると、とにかくボクシングオーバーヘッドがあります。しかし、この操作が効率的であることが本当に必要な場合は、どちらも使用する必要はありませんが、[このような]何かを行う必要があります(https://stackoverflow.com/q/5380568/2711488)。 k個の最小または最大の要素については同じです。 – Holger

関連する問題