[解決済み] 述語による最初の要素の検索
2022-03-16 13:17:35
質問
私はJava 8のラムダを使い始めたばかりで、関数型言語で慣れ親しんできたことをいくつか実装しようとしています。
例えば、ほとんどの関数型言語には、シーケンスやリストを操作して最初の要素を返す、ある種のfind関数があり、それに対する述語は
true
. Java 8でこれを実現する方法はただ一つ。
lst.stream()
.filter(x -> x > 5)
.findFirst()
しかし、この方法は非効率的だと思います。もっといい方法はないでしょうか?
解決方法は?
いいえ、フィルタはストリーム全体をスキャンするわけではありません。これは中間処理であり、遅延ストリームを返す(実際にはすべての中間処理は遅延ストリームを返す)。次のようなテストをしてみてほしい。
List<Integer> list = Arrays.asList(1, 10, 3, 7, 5);
int a = list.stream()
.peek(num -> System.out.println("will filter " + num))
.filter(x -> x > 5)
.findFirst()
.get();
System.out.println(a);
どの出力か。
will filter 1
will filter 10
10
ストリームの最初の2つの要素だけが実際に処理されていることがわかります。
だから、あなたのやり方は全く問題ありません。
関連
-
ファインバグタイプ
-
自動配線された依存性のインジェクションに失敗しました。
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Javaコレクションをフィルタリングする方法(述語に基づく)?
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み] Java 8 で java.util.stream.Stream からリストを取得する
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
-
[解決済み】Java SE 8はPairsとTuplesのどちらを採用していますか?
-
[解決済み] Java 8では、ラムダを使用してMap<K,V>を別のMap<K,V>に変換するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
springboot project MIMEタイプ text/htmlで転送された静的ファイルを読み込む。
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
Javaクラスローダーにソースコードから潜り込む
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
IDEA パッケージステートメントの欠落
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み] ストリームから条件に合う最初の要素を取得する
-
[解決済み] Javaでintはnullにできますか?