問題タブ [java-stream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
79965 参照

java - 新しいコレクションにストリーミングするコレクション

コレクションをフィルタリングする最も簡単な方法を探しています。みたいなことを考えている

しかし、フィルターから別のコレクションを返すか、データを入力するのに最適な方法がわかりません。ほとんどの例は、「ここで印刷できます」のようです。不足しているコンストラクターまたは出力メソッドがある可能性があります。

0 投票する
4 に答える
4632 参照

java - ストリーム生成時の制限条件の提供

フィボナッチ数を計算するコードを書いています。このコードで、フィボナッチ数列の最初の n 個の数を生成できます。

このメソッドは、このメソッドに渡された要素の数を保持する をlimit返します。フィボナッチ数がある値に達しStreamた後、 の生成を停止したい。Stream

つまり、1000 未満のすべてのフィボナッチ数をリストしたい場合は、 を使用できませlimitん。フィボナッチ数がいくつあるか分からないからです。

ラムダ式を使用してこれを行う方法はありますか?

0 投票する
1 に答える
113 参照

java - マップから最大 n の数値を取得する最も簡潔な方法は?

私はすでに次のものを持っています:


これにより、列挙型から「出現回数」へのマッピングが行われるため、 およびにEURマッピングできます。おそらく、カウントは同じかもしれません。10USD1

できるだけ簡潔に、そして を使用する能力があれば、最大数に属する をjava-8取得する必要がありますか? InvoiceCurrencyそして、ソートされた整数カウントの上位2つが実際に同じ値であることを確認する簡潔な方法はありますか?

java-8ループなどでプログラムできることはわかっていますが、最も保守しやすいコードの精神に頼りたいと思っています。

0 投票する
1 に答える
76 参照

java - FibSupplier を一般的な FiniteSupplier に変える方法は?

次のクラスがあるとします。

ここでは特殊な実装がありますFibSupplierが、一般化された問題を公開していることがわかります。私が抽出できたのは次のとおりです。

  • がありPredicateます。
  • 初期変数があります。
  • 述語によってテストする必要がある変数があります。
  • カスタムnext()メソッドがあります。

これを一般化する私の試みは次のとおりでした。今のところ、特殊な整数バージョンの代わりに汎用バージョンを使用していることに注意してください。

FiniteSupplierで呼び出すことができるようにしたいのですpredicateが、抽出できた他の要件を実装する方法がよくわかりません。を拡張して抽象化することでできることは理解していFiniteSupplierますが、それは正しい方法ですか?

0 投票する
4 に答える
13340 参照

java - 無限ストリームを作成する方法イテレータの外?

私が作った次のクラスを見る:

そして、それを次のように使用します。

どうすれば無限 を作成できますStream<E>か?

を使用するStream<Integer> infiniteStream = toList(FibonacciSupplier.infinite()).stream()と、おそらく驚くべきことに、無限ストリームを取得することはありません。
代わりに、コードはlist基になるメソッドでの作成で永遠にループします。

これまでのところ、これは純粋に理論的なものですが、最初に無限ストリームから最初の x 個の数字をスキップしてから、最後の y 個の数字で制限したい場合、その必要性を明確に理解できます。たとえば、次のようになります。

コードが結果を返すことはありません。どうすればよいですか?

0 投票する
2 に答える
11968 参照

java - ストリームとパフォーマンスを備えた Java 8 ネストされたループ

Java 8 ストリームを練習するために、次のネストされたループを Java 8 ストリーム API に変換してみました。a^b (a,b < 100) の最大桁合計を計算し、Core i5 760 で ~0.135 秒かかります。

私の解決策は、並列処理のために高速になると予想していましたが、実際には 0.25 秒かかりました ( parallel().

私の質問

  • 変換を正しく行いましたか、またはネストされたループをストリーム計算に変換するより良い方法はありますか?
  • ストリーム バリアントが古いものよりもずっと遅いのはなぜですか?
  • parallel() ステートメントが実際に時間を 0.19 秒から 0.25 秒に増やしたのはなぜですか?

マイクロベンチマークは壊れやすく、並列処理は大きな問題の場合にのみ価値があることを知っていますが、CPU の場合、0.1 秒でも永遠ですよね?

アップデート

Eclipse Kepler の Junit 4 フレームワークで測定します (テストの実行にかかった時間を示します)。

100 ではなく a,b<1000 の結果:

  • 伝統的なループ 186s
  • 順次ストリーム 193s
  • パラレル ストリーム 55s

更新 2sum+=Integer.valueOf(c+""); (Peter に感謝します!) に置き換えるsum+= c - '0';ことで、並列メソッドの 10 秒が短縮され、45 秒になりました。こんなに大きなパフォーマンスへの影響を期待していませんでした!

また、並列処理を CPU コアの数 (私の場合は 4) に減らしても、時間が 44.8 秒にしか短縮されなかったため、あまり効果がありませんでした (はい、a と b=0 を追加しますが、これはパフォーマンスの多く):