2015-05-02 109 views
4

只是想檢查數據是否已存在或不在ArrayList中,但每次獲取:不存在(s)而數據存在於ArrayList中,因此我得到重複記錄名單..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); 
       } 

      } 

問題:

沒有得到任何消息吐司,我使用,以表明 「數據存在」 或 「不是」

最後其中:

我想補充項目的ArrayList,如果已經不存在的(一個或多個),否則要顯示吐司該項目已經存在(一個或多個)

+0

equals方法比較對象。在這裏,你正在比較列表對象與錯誤的列表項。您需要遍歷列表以檢查特定名稱是否存在。 –

+0

**條件**中的錯誤。打印「DataArrayList.secondArraylist」和「strName」的值你會發現錯誤。 – Wizard

+0

檢出:http://stackoverflow.com/questions/14192532/how-to-prevent-the-adding-of-duplicate-objects-to-an-arraylist –

回答

14

您有String

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

比較列表對象DataArrayList.secondArraylist這將始終返回false。相反,創建一個方法循環訪問列表,並檢查strName與存儲在列表中的Second對象的名稱。

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

看起來不錯,但你可以用其他方式讓我看到相同,可能會用更簡單的方式 – Oreo

+0

@Oreo更簡單的方法嗎? – pathfinderelite

+0

我的意思是這樣的:對(INT I = 0; I Oreo

0

您需要使用indexOf()而檢查的ArrayList

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

ArrayList包含「Second」類型的對象,而不是「 String'。這不起作用。 – pathfinderelite

0

由於strName要檢查你的對象Second的屬性,你不能檢查它直接使用ArrayList的方法。最簡單的方法是循環ArrayList DataArrayList.secondArraylist,獲取列表中包含的每個Second對象,然後檢查strName是否等於您的Second對象的屬性。

不知道如何實現Second對象,但應從每個Second對象中獲取相應的字符串,然後將其與strName進行比較。

1

contains方法使用簽名equals(Object)調用equals方法,因此您需要在POJO類中重寫此方法。

如果重寫equals(對象),那麼你也應該重寫了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)"); 
} 
+0

這假定如果兩個'Second'對象的名字相同,則它們是相等的。我不認爲這是一個安全的假設。 – pathfinderelite

+0

這不是假設。 _這是他所需要的_我們可以從'toString'返回值,我們要在這個值上比較兩個對象 –

+0

'toString()'進入圖片的位置?它不用於比較。另外,爲什麼'!super.equals(obj);'?這會導致「equals」方法與其意圖相反。 – pathfinderelite

相關問題