2016-10-21 4 views
0

をオブジェクトを検索するとき、私は、オブジェクトがリストに既には、リスト内の

myClientList.contains(client); 

であれば、私はクライアントのチェックインがリストに存在する場合、いくつかのプロパティを除外したいチェックするために、このコードを使用するいくつかのプロパティを除外しますadressageなどです。ちょうどfirstNamelastNameと年齢を確認してください。 myClientList.containsを使用するときにそれを行うオプションがありますか、それを行うために私自身の関数を書く必要がありますか?

+0

'myClientList.contains(client);'は 'equals'メソッドの実装に依存しています。これが_client_オブジェクトの_general equality_と一致する場合は、それに応じて実装する必要があります。 (そうすれば 'hashcode'を忘れないでください)そうでなければ、somehow_temporary_等価性の定義だけが必要な場合は、何らかのフィルタリングを使用するべきです。 –

+0

'contains'は' equals'で動作しません。クライアントクラスで 'equals'をオーバーライドし、特定のフィールドだけをチェックするようにすることができます。または、リストを繰り返して手動でチェックしてください。 – khelwood

答えて

0

contains方法は、あなたのClientクラスのequals法に基づいているので、あなたは、あなたが必要と合う仲間としてやってequals方法をovveride必要があります。そうしないと

@Override 
public boolean equals(Object object){ 
    if(object == null) 
     return false; 

    else if(!(object instanceof Client)) 
     return false; 

    else { 
     Client client = (Client)object; 

     if(firstName.equals(client.getFirstName()) && 
       lastName.equals(client.getLastName() && 
       age.equals(client.getAge())) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

手動しばらくこれらの属性を確認することができます反復する。

1

何か@El Sam答えはOKですが、同じ名前、姓、年齢の2人がいる可能性がありますので、equals/hashcodeを使用するのは良い選択ではありません。

あなたの場合。あなた自身の関数を書く方が良いでしょう。ループを作成して条件を確認するだけです。

Java 8を使用している場合は、ラムダ式を使用できます。

myClientList.stream().anyMatch(r -> 

     r.getFirstName().equals(client.getFirstName()) && 
     r.getLastName().equals(client.getLastName()) && 
     r.getAge() == client.getAge() 
    ); 
0

真のコレクションを反復処理し、このオブジェクトを見つけて、除外することができますプロパティを返し含ま

0

java.util.List.contains(Object o)Object.equals(Object o)方法の期間内のオブジェクトの平等に依存しています。 それは強い意味を持っています。

名前と姓などのオブジェクトが、他のオブジェクトと等しいいくつかのプロパティを持っているかどうかを知ることは、クライアントを識別するのには関係がないため、equalsメソッドとの関連はないはずです(@Locで述べたように、 。むしろいくつかの基準を備えた検索方法です。

あなたの場所では、クライアントの検索操作を行うサービスを作成するか、Listを実装する独自のリストを作成しますが、私のニーズに合ったfindメソッドも提供します。