Java 我有一个arraylist,我在其中验证特定对象是否存在,但即使它存在,也总是返回false

Java 我有一个arraylist,我在其中验证特定对象是否存在,但即使它存在,也总是返回false,java,Java,嗨,我有一个名为userdata的类,它返回类型为User的Userarraylist。当我尝试使用contains方法检查特定属性是否存在时,它总是返回false为什么 实际上,我希望数组列表是泛型的,它应该返回数组列表中设置的对象 String className = data.getUserData().get(0).getClass().getSimpleName(); if(className.equalsIgnoreCase("User")) { ArrayList<U

嗨,我有一个名为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()); 
   }
}
String className=data.getUserData().get(0.getClass().getSimpleName();
if(className.equalsIgnoreCase(“用户”)){
ArrayList userdata=新的ArrayList();
userdata=data.getUserData();
System.out.println(data.getUserData().contains(u.getUserId());
if(userdata.contains(u.getUserName())){
System.out.println(userdata.get(0.getEmailId());
}
}

当您检查ArrayList是否包含ID或字符串时,它是一个用户列表

userdata.contains(u);

问题是,
ArrayList
包含
对象
,而不是这些对象的id

您试图将
u.getUserId
与列表中的对象进行比较,这不是有效的比较(User!=int)

更新

boolean contains = false;
for (User user : userdata) {
    // assuming userID is a number!!
    if(user.getUserId() == u.getUserId()) {
        contains = true;
        break;
    }
}

您不能将列表中的contains与
User
对象及其属性一起使用,即
User.userId
User.email

最好重写
User
类中比较属性的
equals
方法,如下所示:

 @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;
    }
然后使用
包含
作为

   userdata.contains(u)

请注意,您应该使用
instanceof
运算符或
Class.equals
方法,而不是使用字符串检查简单的名称是否相等
userdata.get(一些索引).getUserName.equals(u.getUserName())

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

for (User user : userdata) {

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

注意,我假设username属性有一个getter,因此您的程序看起来像文件?@raghavenderredy No。它包含用户。List userdata=new ArrayList();我想知道数组列表中存在哪些属性,我可以实现这一点吗?将传递的对象与列表中的对象进行比较,如果
o==null,则返回true?e==null:o.equals(e)
(即两个对象必须相等)。实现这一点的最佳方法是遍历列表,将列表中对象的
getUserId
u.getUserId()
进行比较。我用这种方法尝试了(User users1:userdata){if(userdata.contains(users1.getEmailId()){System.out.println(“Name:”;}}即使它不起作用,我也添加了一个可能的解决方案我想获取存储在arraylist中的属性我不想要值,假设我的用户类有10个属性,但在arraylist中我只添加了3个属性,我想知道我在arraylist中添加了哪些属性