1. ホーム
  2. java

[解決済み] 一方のリストに他方のリストが含まれているかどうかを確認する

2022-05-09 10:46:53

質問

異なるオブジェクトが含まれる2つのリストがあります。

List<Object1> list1;
List<Object2> list2;

リスト1の要素がリスト2に存在するかどうかを、特定の属性に基づいてチェックしたい(オブジェクト1とオブジェクト2は、attributeSameという名前の1つの相互属性(Longタイプ)を(とりわけ)持っています)。

今、私はこのようにやっています。

boolean found = false;
for(Object1 object1 : list1){
   for(Object2 object2: list2){
       if(object1.getAttributeSame() == object2.getAttributeSame()){
           found = true;
           //also do something
       }
    }
    if(!found){
        //do something
    }
    found = false;
}

しかし、私はこれを行うためのより良い、より速い方法があると思います :) どなたか提案していただけませんか?

ありがとうございます。

解決方法は?

基本的な等質性をテストするだけなら、入力リストを修正することなく、基本的なJDKで一行で可能です

!Collections.disjoint(list1, list2);

特定のプロパティをテストする必要がある場合、それはより困難です。 私は、デフォルトで、お勧めします。

list1.stream()
   .map(Object1::getProperty)
   .anyMatch(
     list2.stream()
       .map(Object2::getProperty)
       .collect(toSet())
       ::contains)

...この値は list2 の各値をテストし list1 が存在するかどうかを確認します。