web-dev-qa-db-fra.com

ArrayList vérifie si les données existent déjà

Je veux juste vérifier si des données existent déjà ou non dans ArrayList, mais à chaque fois que: 

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

             }

Problème:

Ne pas recevoir de message Toast, que j'utilise pour indiquer que "Data Exists" ou "Not"

Finalement:

Je voudrais ajouter un article à une liste s'il n'existe pas déjà, sinon montrer à Toast que cet article existe déjà

6
Oreo

Vous comparez votre objet liste DataArrayList.secondArraylist avec un String

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

Cela retournera toujours false. À la place, créez une méthode qui parcourt la liste et compare la variable strName au nom des objets Second stockés dans la liste.

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

Alors utilise-le

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

La méthode contains appelle la méthode equals avec signature equals (Object). Vous devez donc remplacer cette méthode dans votre classe POJO.

Si vous remplacez égal à (Object), vous devez également remplacer hashcode ()

Extrait de code : 

@Override
public String toString() {
    return getName();
}

 @Override
 public boolean equals(Object obj) {
     return !super.equals(obj);
 }

 @Override
 public int hashCode() {
      return getName().hashCode();
 }

Modifier :

De plus, la méthode includes est utilisée pour Object. Votre condition devrait donc ressembler à ceci: 

 (DataArrayList.secondArraylist.contains(actorList.get(position))) 

Code final:  

if (DataArrayList.secondArraylist.contains(actorList.get(position))) {
    System.out.println("Data Exist(s)");
} else {
    System.out.println("Not Exist(s)");
}
2
SweetWisher ツ

Vous devez utiliser indexOf() lors de la vérification d'une valeur dans ArrayList

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

Comme la variable strName que vous vérifiez est une propriété de votre objet Second, vous ne pouvez pas la vérifier directement à l'aide de la méthode de la variable ArrayList. Le moyen le plus simple serait de parcourir ArrayList DataArrayList.secondArraylist, obtenez chaque objet Second contenu dans la liste, puis vérifiez si strName est égal à cette propriété de votre objet Second

Vous ne savez pas comment vous implémentez l'objet Second, mais vous devez obtenir la chaîne correspondante de chaque objet Second, puis la comparer à strName.

0
Gisonrg