2017-11-10 17 views
0

私は2つのオブジェクトを持っていますが、どちらも私が比較する必要がある4つの類似したフィールドがあり、それらをオブジェクトのリストとしてさまざまなソースから取得します。私は両方のリストに少なくとも1つの一致するオブジェクトがあることを確認したい。問題は、それらが異なる順序になることができるということです。私はその後、私はループ2つの異なるオブジェクトのリストを比較する

for(Object1 object1 : list1){ 
    bool match = false; 
    for(Object2 object2 : list2){ 
     if(object1.getField1().equal(object2.getField1()) && etc etc..){ 
      match = true; 
      break; 
     } 
    } 
    if(!match) 
     return false 
} 
return true; 

ための2つの基本的にIは物体1内のすべての同じフィールドを有する少なくとも1つの一致行が存在する場合がない場合は、参照するLIST2の全てを反復しているこのコードを有しますfalseを返します。一致する行がある場合は、list1のすべての行をチェックするまで次の行に移動します。

私はこの検査方法が気に入らず、これをチェックする簡単な方法があるかどうか疑問に思っていました。私はJava 8でストリームを使用して聞いたことがあるが、私はこのシナリオで使用する方法を考えることができません。どんな助けでも大歓迎です、ありがとうございます。

+0

あなたは、リストの各オブジェクトを定義するクラスを書きましたか? –

+0

@BillHorvath、私は混乱しています、オブジェクトのtoStringのような意味ですか?または、クラス内の各オブジェクトを取得するクラスですか? – anonuser1234

+0

申し訳ありませんが、それが明確でない場合。リスト内の各オブジェクトは、4つのフィールドを持つクラスのインスタンスです。あなたはクラスを書きましたか?あるいは、java.util、org.springframeworkなどのライブラリからですか? –

答えて

0

あなたは、この使用することができます。このように等しい静的メソッドで

boolean isMatchs = list1.stream() 
     .allMatch(el1 -> list2.stream().anyMatch(el2 -> equals(el1, el2))); 

を:

static boolean equals(Object1 a, Object2 b) { 
    return Objects.equals(a.getField1(), b.getField1());// && ... 
} 
関連する問題