-1

こんにちは、タイプ User の Userarraylist を返す userdata というクラスがあります。特定のプロパティが存在するかどうかを確認するために contains メソッドを使用しようとすると、常に false が返されるのはなぜですか?

実際には、配列リストをジェネリックにして、配列リストに設定されているオブジェクトを返す必要があります。

String className = data.getUserData().get(0).getClass().getSimpleName();

if(className.equalsIgnoreCase("User")) {
   ArrayList<User> userdata=new ArrayList(); 
   userdata = data.getUserData();
   System.out.println(data.getUserData().contains(u.getUserId())); 

   if(userdata.contains(u.getUserName())) {
      System.out.println(userdata.get(0).getEmailId()); 
   }
}
4

5 に答える 5

4

IDまたは文字列が含まれているかどうかを確認している間、ArrayListはユーザーのものです。

userdata.contains(u);
于 2012-10-17T04:43:43.190 に答える
3

問題は、これらのオブジェクトの id ではなく、ArrayListcontainsです。Objects

をリスト内のオブジェクトと比較しようとしていますがu.getUserId、これは有効な比較ではありません (ユーザー != int)

アップデート

boolean contains = false;
for (User user : userdata) {
    // assuming userID is a number!!
    if(user.getUserId() == u.getUserId()) {
        contains = true;
        break;
    }
}
于 2012-10-17T04:44:54.993 に答える
2

補足として、文字列との等価性をチェックする単純な名前の名前を取得する代わりに、instanceof演算子またはメソッドのいずれかを使用する必要があります。Class.equals

于 2012-10-17T04:47:45.763 に答える
0

それは次のようになります userdata.get(SOME_INDEX).getUserName.equals(u.getUserName());

または、ArrayList全体をスキャンする場合は、forループ内でこの行を使用します

for (User user : userdata) {

    if(user.getUserName().equals(u.getUserName())) {
        return true;
    }
}

ユーザー名属性にゲッターがあると仮定したことに注意してください

于 2012-10-17T05:00:00.893 に答える
0

User属性 ieuser.userIdまたはを持つオブジェクトのリストで、contains を使用することはできませんuser.email

以下のように属性を比較するクラスのequalsメソッドをオーバーライドすることをお勧めします。User

 @Override
 public boolean equals(Object obj) {
      User other = (User) obj;
      if (userId == null) {
         if (other.userId != null)
        return false;
      } else if (!userId.equals(other.userId))
           return false;
      if (userName == null) {
         if (other.userName != null)
            return false;
      } else if (!userName.equals(other.userName))
        return false;
     return true;
    }

そして、次のように使用containsします

   userdata.contains(u)
于 2012-10-17T04:45:14.097 に答える