-1

嗨,我有一个名为 userdata 的类,它返回 User 类型的 Userarraylist。当我尝试使用 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

The ArrayList is of Users while you are checking to see if it contains an ID or String.

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

问题是,ArrayListcontains Objects,而不是这些对象的 id。

您正在尝试将 与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

您不能将列表中的 contains 与User具有其属性的对象(即user.userIduser.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 回答
0

它应该像 userdata.get(SOME_INDEX).getUserName.equals(u.getUserName());

或者,如果您想扫描整个 ArrayList,请在 for 循环中使用此行

for (User user : userdata) {

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

请注意,我假设用户名属性有一个 getter

于 2012-10-17T05:00:00.893 回答