簡體   English   中英

ArrayList檢查數據是否已存在

[英]ArrayList check if data already exists

只想檢查數據是否已存在於ArrayList中,但每次都得到:Not Exist(s)而數據存在於ArrayList中,因此我在列表中獲得重復記錄。

    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);
                }

             }

問題:

沒有得到任何Toast消息,我用它來表示“數據存在”或“不存在”

最后:

我想將項目添加到arraylist如果已經不存在,否則想要顯示Toast該項目已經存在(s)

您正在將列表對象DataArrayList.secondArraylistString進行比較

if (DataArrayList.secondArraylist.equals(strName)) {

那將永遠是false 而是創建一個循環遍歷列表的方法,並根據列表中存儲的Second對象的名稱檢查strName

boolean contains(ArrayList<Second> list, String name) {
    for (Second item : list) {
        if (item.getName().equals(name)) {
            return true;
        }
    }
    return false;
}

然后使用它

if (contains(DataArrayList.secondArraylist, strName)) {
    System.out.println("Data Exist(s)");
} else {
    System.out.println("Not Exist(s)");
}

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方法用於Object。 所以,你的情況應該是這樣的:

 (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)");
}

您需要在檢查ArrayList中的值時使用indexOf()

if (DataArrayList.secondArraylist.indexOf(strName)!=-1) {
System.out.println("Data Exist(s)");
    } else {
System.out.println("Not Exist(s)");
}

由於您要檢查的strName是Object Second的屬性,因此無法使用ArrayList方法直接檢查它。 最簡單的方法是遍歷ArrayList DataArrayList.secondArraylist ,獲取列表中包含的每個Second對象,然后檢查strName是否等於Second對象的該屬性。

不確定如何實現Second對象,但是你應該從每個Second對象獲取相應的String,然后將它與strName進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM