[解決済み】Java List.contains(Object with field value equal to x)
2022-04-17 18:31:49
質問
をチェックしたい。
List
は、特定の値を持つフィールドを持つオブジェクトを含んでいます。ループを使ってチェックすることもできますが、もっと効率的なコードはないものかと考えていました。
のようなものです。
if(list.contains(new Object().setName("John"))){
//Do some stuff
}
上記のコードは何もしていないことは分かっていますが、私が実現しようとしていることを大まかに示すためのものです。
また、単純なループを使いたくない理由は、このコードは現在、ループの中のループの中に入っていて、そのループの中のループの中に入っているためです。可読性を高めるために、ループの中にループを追加し続けたくありません。そこで、何かシンプルな代替手段がないかと考えていました。
どのように解決するのですか?
ストリーム
Java 8を使用している場合、おそらくこのようなことを試すことができます。
public boolean containsName(final List<MyObject> list, final String name){
return list.stream().filter(o -> o.getName().equals(name)).findFirst().isPresent();
}
あるいは、次のような方法もあります。
public boolean containsName(final List<MyObject> list, final String name){
return list.stream().map(MyObject::getName).filter(name::equals).findFirst().isPresent();
}
このメソッドは
true
もし
List<MyObject>
が含まれています。
MyObject
という名前で
name
. のそれぞれに対して操作を行いたい場合は、以下のようになります。
MyObject
その
getName().equals(name)
であれば、次のようなことを試してみてはいかがでしょうか。
public void perform(final List<MyObject> list, final String name){
list.stream().filter(o -> o.getName().equals(name)).forEach(
o -> {
//...
}
);
}
ここで
o
を表します。
MyObject
のインスタンスを作成します。
あるいは、コメントにあるように(MK10さんありがとうございます。
Stream#anyMatch
メソッドを使用します。
public boolean containsName(final List<MyObject> list, final String name){
return list.stream().anyMatch(o -> o.getName().equals(name));
}
関連
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] 警告: コンテキスト初期化中に例外が発生 - 更新の試みはキャンセルされました。
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Javaでオブジェクトをコピーするにはどうしたらいいですか?
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
-
[解決済み] JavaでList<String>オブジェクトを初期化する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] Javaで拡張子なしのファイル名を取得する方法は?
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] IntegerからBigIntegerへの変換