問題タブ [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 投票する
2 に答える
3688 参照

java - Java 8 ストリームでの NoSuchElementException の回避

この質問は、以前の質問へのフォローアップです: Streams を使用して BigDecimals を追加する

BigDecimalJava 8 Streams と Lambda 式を使用して s を合計することに関連する質問。与えられた答えを実装した後、私は別の問題に遭遇しました.ストリームが空のときはいつでも、Optional::get()メソッドはNoSuchElementException.

次のコードを検討してください。

通常の Java コードでは空のコレクションに問題はありませんが、新しい Java 8 コードでは問題が発生します。

ここで NSEE を回避する最もエレガントな方法は何ですか? 確かに私たちはできる:

しかし、空のコレクションを処理する Java 8 風の方法はありますか?

0 投票する
5 に答える
106050 参照

java - Java 8: ストリームとコレクションのパフォーマンス

私は Java 8 を初めて使用します。API の詳細はまだわかりませんが、新しい Streams API と古き良き Collections のパフォーマンスを比較するための小さな非公式のベンチマークを作成しました。

このテストでは、 のリストをフィルタリングし、Integer偶数ごとに平方根を計算して の結果Listに格納しDoubleます。

コードは次のとおりです。

デュアル コア マシンの結果は次のとおりです。

この特定のテストでは、ストリームはコレクションの約 2 倍遅く、並列処理は役に立ちません (または、間違った方法で使用していますか?)。

質問:

  • このテストは公平ですか?私は間違いを犯しましたか?
  • ストリームはコレクションより遅いですか? 誰かがこれについて正式なベンチマークを作成しましたか?
  • どのアプローチを目指すべきですか?

結果を更新しました。

@pveentjer のアドバイスに従って、JVM ウォームアップ (1k イテレーション) の後にテストを 1k 回実行しました。

この場合、ストリームはよりパフォーマンスが高くなります。フィルタリング関数が実行時に 1 回か 2 回しか呼び出されないアプリでは、何が観察されるのだろうか。

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

java - Java 8 Stream API で Collectors.grouping を使用してマップを作成する方法

Java 8 のストリーム API を初めて探しています。マップから要素を削除するフィルターを作成しようとしました。

これは私の地図です:

値 <= 0 のエントリを削除したいので、フィルタを適用して新しいマップ (Map<String, Integer>) を取得したいと考えています。

これは私が試してきたことです:

HashMap<String, ArrayList<HashMap$Node>> を取得します。だから、私が探していたものではありません。

私も試しました:

これにより、次のことが発生します。

基本的に、新しいマップの値を構築する方法がわかりません。

これはCollectors の javadoc です。彼らは groupingBy の例をいくつか書いていますが、私はそれを機能させることができませんでした。

では、自分の Map を思いどおりに構築するには、 collectをどのように記述すればよいでしょうか?

0 投票する
24 に答える
283456 参照

java - Java Stream を 1 つの要素のみにフィルター処理する

Java 8 を使用Streamして a 内の要素を見つけようとしていLinkedListます。ただし、フィルター条件に一致するものが 1 つだけであることを保証したいと思います。

次のコードを使用します。


Userこのコードは、 ID に基づいて を見つけます。Userただし、フィルタに一致した の数は保証されません。

フィルター行を次のように変更します。

NoSuchElementException(良い!)を投げます

ただし、複数の一致がある場合はエラーをスローしたいと思います。これを行う方法はありますか?

0 投票する
3 に答える
2534 参照

java - Callable を返すIntStream オブジェクトの mapToObj 関数からのリスト

それぞれが範囲 [1..99) からの int パラメータを持ち、1 つのメソッドを実行する Callable のリストを作成する必要があります。私の最初のアイデアは次のとおりです。

次のアイデアは、リストする項目を収集することでした。

良さそうに見えますが、mapToObj 関数では内部ラムダが Callable<Double> として認識されません。このような典型的な内部クラスを使用すると、機能します。

戻り値の型をラムダ式に渡す方法はありますか?

0 投票する
12 に答える
199763 参照

java - Stream::flatMap で Java 8 の Optional を使用する

新しい Java 8 ストリーム フレームワークとその仲間は、いくつかの非常に簡潔な Java コードを作成しますが、私は簡潔に行うのが難しい、一見単純な状況に出くわしました。

List<Thing> thingsand メソッドを考えてみましょうOptional<Other> resolve(Thing thing)Things をOptional<Other>s にマップして、最初の を取得したいOther。明らかな解決策は を使用することですが、ストリームを返す必要がありthings.stream().flatMap(this::resolve).findFirst()、メソッドを持っていません(または、に変換するか、 として表示するメソッドを提供します)。flatMapOptionalstream()CollectionCollection

私が思いつくことができる最高のものはこれです:

しかし、それは非常に一般的なケースのように見えるものに対して、非常に長々としたようです. 誰でも良いアイデアがありますか?

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

java - Java 8 ストリーム - チェーンの各ステップは入力全体に対して評価されますか、それとも項目が通過しますか?

この些細なプログラムがあれば言ってください

舞台裏では a) または b) のように動作しますか?

B

0 投票する
8 に答える
117024 参照

java - 2 つの Java 8 ストリーム、またはストリームへの追加要素の追加

次のように、ストリームまたは追加の要素を追加できます。

そして、次のように、新しいものを追加できます。

concatしかし、静的であるため、これは醜いです。インスタンスメソッドである場合concat、上記の例ははるかに読みやすくなります。

私の質問は:

concat1)静的である正当な理由はありますか? または、欠落している同等のインスタンスメソッドがありますか?

2) いずれにせよ、これを行うためのより良い方法はありますか?