2017-05-05 2 views
2

J'ai un gros problème avec ça, maintenant j'ai une classe appelée FileRelationship, et j'ai deux constructeurs avec. La classe est montrée ci-dessous. J'ai également outrepassé la méthode equals dans cette classe.Android Search ArrayList d'objets pour un seul paramètre, retourne l'index de l'objet

public class FileRelationship { 
String fileName; 
String firstLink; 
String secondLink; 
String thirdLink; 

public FileRelationship(String fileName) { 
    this.fileName = fileName; 
} 

public FileRelationship(String fileName, String firstLink, String secondLink, String thirdLink) { 
    this.fileName = fileName; 
    this.firstLink = firstLink; 
    this.secondLink = secondLink; 
    this.thirdLink = thirdLink; 
} 

public boolean equals(Object o) { 
    if(o == null) { 
     return false; 
    } 

    if(this == o) { 
     return true; 
    } 

    if(o instanceof FileRelationship) { 
     return this.fileName.equals(((FileRelationship)o).fileName); 
    } 

    return false; 
} 

}

Maintenant, j'ai un arrayList de FileRelationships et je veux être en mesure de rechercher dans cette liste (Ces tous utilisent le constructeur avec 4 cordes en elle (fileName, FirstLink, secondlien, thirdLink)) Maintenant, j'ai une méthode dans une autre classe qui est censée rechercher cette arrayList et trouver l'index de celle qui a un nom de fichier correspondant. Quand j'appelle cette méthode je ne fais que passer dans le constructeur avec le nomFichier et c'est tout. (C'est le seul que je peux faire, je ne connaîtrai pas les autres cordes).

Voici comment j'ai configuré ArrayList de FileRelationships.

 fileRelationships = new ArrayList<FileRelationship>(); 

    String MasterLine; 

    InputStream inputStream = this.getResources().openRawResource(R.raw.masterfile); 

    InputStreamReader inputreader = new InputStreamReader(inputStream); 
    BufferedReader buffreader = new BufferedReader(inputreader); 

    // Creates the arrayList of all the relationships for later use of retreival. 
    try { 
     while ((MasterLine = buffreader.readLine()) != null) { 
      MasterLineArray = MasterLine.split(","); 
      String filename = MasterLineArray[0]; 
      String choice1 = MasterLineArray[1]; 
      String choice2 = MasterLineArray[2]; 
      String choice3 = MasterLineArray[3]; 
      FileRelationship fr = new FileRelationship(filename, choice1, choice2, choice3); 

      fileRelationships.add(fr); 
     } 
    } catch (IOException e) { 

    } finally { 
     closeQuietly(buffreader); 
} 

C'est ma méthode pour trouver la relation et la mise à la variable que j'ai besoin. Je veux être capable de trouver l'index de la liste et l'appliquer à la variable.

 public void findRelationship(String nextFileName) { 
     int pageIndex = fileRelationships.indexOf((new FileRelationship(nextFileName))); 
     selectedRelationship = fileRelationships.get(pageIndex); 
     currentPage = pageIndex; 
    } 

EDIT: Je suis désolé d'avoir oublié ce qui n'allait pas. Non ça ne marche pas. pageIndex retourne un -1 (Donc, en d'autres termes, il ne trouve rien). Je ne sais pas quoi faire d'autre, peut-être utiliser HashCode mais honnêtement, j'ai même cherché des trucs à ce sujet et je ne peux pas vraiment comprendre comment utiliser ça non plus.

J'ai vraiment vraiment besoin d'aide à ce sujet, car c'est pour un projet d'école à venir. J'ai fait la plupart du projet car une fois que j'aurais fini cette partie, je devrais presque finir. Merci.

+1

Quel est le problème avec ce code? Ça ne marche pas? – Eran

+0

Je pense que vous devriez utiliser Iterator pour chercher dans la liste ou simplement utiliser foreach loop si vous ne voulez pas faire de modification. Je pense que dans votre cas, la valeur de pageIndex est -1. ai-je raison? – FaisalAhmed

+0

Parce que j'essayais de comparer un FileRelationship (String, String, String String) avec un FileRelationship (String), je me suis dit que je devais le faire. Oui mon pageIndex est -1 et c'est le problème. Est-ce que cela aidera à retourner l'index? –

Répondre

2

Recherche comme celui-ci

public void findRelationship(String nextFileName) { 

for(FileRelationship file:fileRelationships) 
{ 
    if(file.firsFileName.equals(nextFileName)) 
    { 
    currentPage=fileRelationships.indexOf(file); 
    } 
} 

} 
liste

renvoie -1 lorsque la liste ne contient pas cet objet. Dans votre cas où vous utilisez indexOf() obj en créant un nouvel objet

int pageIndex = fileRelationships.indexOf((new FileRelationship(nextFileName))); 

ce n'est pas la bonne façon. parce que vous créez nouvel objet et la liste ne contient pas nouvel objet

Et également mutateur getter pour chaque champs en classe FileRelationship accédant directement chaque champ n'est pas la bonne pratique