Java ArrayList检查数据是否已存在
只想检查数据是否已经存在于ArrayList中,但每次获取:not exist(s),而数据存在于ArrayList中,因此我在列表中获取重复记录Java ArrayList检查数据是否已存在,java,android,arraylist,Java,Android,Arraylist,只想检查数据是否已经存在于ArrayList中,但每次获取:not exist(s),而数据存在于ArrayList中,因此我在列表中获取重复记录 DataArrayList.secondArraylist.add(new Second(actorList.get(position).getName(), actorList.get(position).getImage())); System.out.println(DataArrayList.secondAr
DataArrayList.secondArraylist.add(new Second(actorList.get(position).getName(), actorList.get(position).getImage()));
System.out.println(DataArrayList.secondArraylist.size());
String strName = actorList.get(position).getName().toString();
Log.d("name:", strName);
for(int i=0; i<DataArrayList.secondArraylist.size(); i++)
{
if(DataArrayList.secondArraylist.get(i).getName().equals(strName)) {
System.out.println(DataArrayList.secondArraylist.get(i).getName());
Toast.makeText(context, "Exist(s)", Toast.LENGTH_SHORT);
}
else {
Toast.makeText(context, "Not Exist(s)", Toast.LENGTH_SHORT);
}
}
DataArrayList.secondArraylist.add(新的第二个(actorList.get(position).getName(),actorList.get(position).getImage());
System.out.println(DataArrayList.secondArraylist.size());
字符串strName=actorList.get(position.getName().toString();
Log.d(“名称:”,strName);
对于(int i=0;i,在检查ArrayList中的值时需要使用indexOf()
if (DataArrayList.secondArraylist.indexOf(strName)!=-1) {
System.out.println("Data Exist(s)");
} else {
System.out.println("Not Exist(s)");
}
您正在将列表对象DataArrayList.secondArraylist
与String
if (DataArrayList.secondArraylist.equals(strName)) {
这将始终返回false
。相反,创建一个方法,在列表中循环,并对照存储在列表中的第二个对象的名称检查strName
boolean contains(ArrayList<Second> list, String name) {
for (Second item : list) {
if (item.getName().equals(name)) {
return true;
}
}
return false;
}
由于要检查的strName
是对象的属性Second
,因此不能使用ArrayList
的方法直接检查它。最简单的方法是通过ArrayListDataArrayList.secondArraylist
循环,获取列表中包含的每个Second
对象,然后检查str名称
等于第二个
对象的属性
不确定如何实现Second
对象,但应该从每个Second
对象中获取相应的字符串,然后将其与strName
进行比较
contains方法调用签名为equals(Object)的equals方法,因此需要在POJO类中重写此方法
如果覆盖equals(Object),则还应覆盖hashcode()
代码段:
@Override
public String toString() {
return getName();
}
@Override
public boolean equals(Object obj) {
return !super.equals(obj);
}
@Override
public int hashCode() {
return getName().hashCode();
}
编辑:
此外,contains方法用于对象。因此,您的条件应如下所示:
(DataArrayList.secondArraylist.contains(actorList.get(position)))
最终代码:
if (DataArrayList.secondArraylist.contains(actorList.get(position))) {
System.out.println("Data Exist(s)");
} else {
System.out.println("Not Exist(s)");
}
equals方法compare to object。您正在将列表对象与错误的列表项进行比较。您需要遍历列表以检查特定名称是否存在。条件中出错。打印DataArrayList的值。secondArraylist
和strName
您将发现错误。签出:ArrayList包含类型为的对象eSecond
,而不是String
。这不起作用。看起来不错,但你能用其他方法给我看一下吗,可能是用更简单的方法。我的意思是这样的:for(int i=0;iSecond
对象的名称相等,那么它们是相等的。我不这么认为我认为这是一个安全的假设。这不是假设。这是他需要的。我们可以从到字符串返回值,我们要在其中比较两个对象到字符串()
在图中出现了什么?它不用于比较。另外,为什么!super.equals(obj)
?这将导致equals
方法执行与其意图相反的操作。@pathfinderelite首先,了解contains方法的概念。您将得到所有答案:)
if (DataArrayList.secondArraylist.contains(actorList.get(position))) {
System.out.println("Data Exist(s)");
} else {
System.out.println("Not Exist(s)");
}