問題タブ [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.
java - Java 8 ストリームでの NoSuchElementException の回避
この質問は、以前の質問へのフォローアップです: Streams を使用して BigDecimals を追加する
BigDecimal
Java 8 Stream
s と Lambda 式を使用して s を合計することに関連する質問。与えられた答えを実装した後、私は別の問題に遭遇しました.ストリームが空のときはいつでも、Optional::get()
メソッドはNoSuchElementException
.
次のコードを検討してください。
通常の Java コードでは空のコレクションに問題はありませんが、新しい Java 8 コードでは問題が発生します。
ここで NSEE を回避する最もエレガントな方法は何ですか? 確かに私たちはできる:
しかし、空のコレクションを処理する Java 8 風の方法はありますか?
java - Java 8: ストリームとコレクションのパフォーマンス
私は Java 8 を初めて使用します。API の詳細はまだわかりませんが、新しい Streams API と古き良き Collections のパフォーマンスを比較するための小さな非公式のベンチマークを作成しました。
このテストでは、 のリストをフィルタリングし、Integer
偶数ごとに平方根を計算して の結果List
に格納しDouble
ます。
コードは次のとおりです。
デュアル コア マシンの結果は次のとおりです。
この特定のテストでは、ストリームはコレクションの約 2 倍遅く、並列処理は役に立ちません (または、間違った方法で使用していますか?)。
質問:
- このテストは公平ですか?私は間違いを犯しましたか?
- ストリームはコレクションより遅いですか? 誰かがこれについて正式なベンチマークを作成しましたか?
- どのアプローチを目指すべきですか?
結果を更新しました。
@pveentjer のアドバイスに従って、JVM ウォームアップ (1k イテレーション) の後にテストを 1k 回実行しました。
この場合、ストリームはよりパフォーマンスが高くなります。フィルタリング関数が実行時に 1 回か 2 回しか呼び出されないアプリでは、何が観察されるのだろうか。
java - Java 8 Stream API で Collectors.grouping を使用してマップを作成する方法
Java 8 のストリーム API を初めて探しています。マップから要素を削除するフィルターを作成しようとしました。
これは私の地図です:
値 <= 0 のエントリを削除したいので、フィルタを適用して新しいマップ (Map<String, Integer>) を取得したいと考えています。
これは私が試してきたことです:
HashMap<String, ArrayList<HashMap$Node>> を取得します。だから、私が探していたものではありません。
私も試しました:
これにより、次のことが発生します。
基本的に、新しいマップの値を構築する方法がわかりません。
これはCollectors の javadoc です。彼らは groupingBy の例をいくつか書いていますが、私はそれを機能させることができませんでした。
では、自分の Map を思いどおりに構築するには、 collectをどのように記述すればよいでしょうか?
java - Java Stream を 1 つの要素のみにフィルター処理する
Java 8 を使用Stream
して a 内の要素を見つけようとしていLinkedList
ます。ただし、フィルター条件に一致するものが 1 つだけであることを保証したいと思います。
次のコードを使用します。
User
このコードは、 ID に基づいて を見つけます。User
ただし、フィルタに一致した の数は保証されません。
フィルター行を次のように変更します。
NoSuchElementException
(良い!)を投げます
ただし、複数の一致がある場合はエラーをスローしたいと思います。これを行う方法はありますか?
java - Callable を返すIntStream オブジェクトの mapToObj 関数からのリスト
それぞれが範囲 [1..99) からの int パラメータを持ち、1 つのメソッドを実行する Callable のリストを作成する必要があります。私の最初のアイデアは次のとおりです。
次のアイデアは、リストする項目を収集することでした。
良さそうに見えますが、mapToObj 関数では内部ラムダが Callable<Double> として認識されません。このような典型的な内部クラスを使用すると、機能します。
戻り値の型をラムダ式に渡す方法はありますか?
java - Stream::flatMap で Java 8 の Optional を使用する
新しい Java 8 ストリーム フレームワークとその仲間は、いくつかの非常に簡潔な Java コードを作成しますが、私は簡潔に行うのが難しい、一見単純な状況に出くわしました。
List<Thing> things
and メソッドを考えてみましょうOptional<Other> resolve(Thing thing)
。Thing
s をOptional<Other>
s にマップして、最初の を取得したいOther
。明らかな解決策は を使用することですが、ストリームを返す必要がありthings.stream().flatMap(this::resolve).findFirst()
、メソッドを持っていません(または、に変換するか、 として表示するメソッドを提供します)。flatMap
Optional
stream()
Collection
Collection
私が思いつくことができる最高のものはこれです:
しかし、それは非常に一般的なケースのように見えるものに対して、非常に長々としたようです. 誰でも良いアイデアがありますか?
java - Java 8 ストリーム - チェーンの各ステップは入力全体に対して評価されますか、それとも項目が通過しますか?
この些細なプログラムがあれば言ってください
舞台裏では a) または b) のように動作しますか?
あ
B
java - 2 つの Java 8 ストリーム、またはストリームへの追加要素の追加
次のように、ストリームまたは追加の要素を追加できます。
そして、次のように、新しいものを追加できます。
concat
しかし、静的であるため、これは醜いです。インスタンスメソッドである場合concat
、上記の例ははるかに読みやすくなります。
と
私の質問は:
concat
1)静的である正当な理由はありますか? または、欠落している同等のインスタンスメソッドがありますか?
2) いずれにせよ、これを行うためのより良い方法はありますか?