2017-09-20 1 views
-3

Je parcours une LinkedList, mais je n'arrive pas à comprendre comment itérer uniquement sur chaque chaîne unique. Je pensais utiliser une boucle ForEach pour parcourir chaque chaîne unique, mais je ne sais pas si c'est possible ou comment le faire. Merci!Comment arrêter les chaînes en double dans la liste liée?

@Override 
public List<String> listRegressions() { 
    // TODO Implement this, ideally in better than O(n^2) 

    LinkedList<String> regressionUnikey = new LinkedList<String>(); 

    for (int i = 0; i < getListSize(); i++) { 
     Integer bestGrade = getBestGrade(students.get(i).getUnikey()); 

     Integer recentGrade = getSubmissionFinal(students.get(i).getUnikey()).getGrade(); 
     if (recentGrade < bestGrade) { 
      regressionUnikey.add(students.get(i).getUnikey()); 
     } 
    } 

    return regressionUnikey; 
} 

Un résultat testcase

java.lang.AssertionError: expected:<[b, c, f]> but was:<[b, b, c, c, f, f]> 
+10

Pourquoi ne pas utiliser un ensemble? Avez-vous réellement besoin d'une liste? – Carcigenicate

+3

Convertir la liste pour définir et itérer sur l'ensemble. – agurylev

+0

Une raison spécifique d'utiliser LinkedList? – Ravi

Répondre

1

Pourquoi utilisez-vous même un LinkedList? Je ne vois pas de raison de commander la sortie de toute façon.

Set<String> regressionUnikey = new HashSet<String>(); 

    for (int i = 0; i < getListSize(); i++) { 
     String key = students.get(i).getUnikey(); 
     Integer bestGrade = getBestGrade(key); 

     Integer recentGrade = getSubmissionFinal(key).getGrade(); 
     if (recentGrade < bestGrade) { 
      regressionUnikey.add(key); 
     } 
    } 

Utilisez simplement un HashSet. Cela assurerait l'unicité.

+0

Ou un [LinkedHashSet] (https://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html) pour préserver l'ordre des éléments. – Stefan