2012-03-28 21 views
1

Ich habe eine zweidimensionale ArrayList, aus der ich die Duplikate filtern muss.Entfernen von Duplikaten aus zweidimensionaler ArrayList

aktuelles Ergebnis generateRows: [[ "one"], [ "zwei"], [ "drei"], [ "one"]]

Java Pseudo-Code:

ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>(); 
rows = generateRows(); //method not shown, but returns a ArrayList<ArrayList<String>> 
Set<String> set = new LinkedHashSet<String>(); 
for (ArrayList<String> list:rows) { 
    set.addAll (list); 
} 
rows.clear(); 
rows.add(new ArrayList<String>(set)); 

aktuelles Ergebnis nach oben Umwandlungscode ausgeführt wird: [[ein, zwei, drei]]

gewünschtes Ergebnis: [[ "one"], [ "zwei"], [ "three"]]

Antwort

1

Keeping Code in gleicher Richtung wie das, was Sie geschrieben haben, schreiben würde , hier ist was du tun musst.

ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>(); 
rows = generateRows(); //method not shown, but returns a ArrayList<ArrayList<String>> 
Set<ArrayList<String>> set = new LinkedHashSet<ArrayList<String>>(); 
set.addAll(rows); 
rows.clear(); 
rows.addAll(set); 

Hauptproblem mit Ihrer Routine:

Set<String> set = new LinkedHashSet<String>(); Sie sagen Set String-Typen, während die wirkliche Menge von Objekten eindeutig sein enthalten wird ist von Arraylist Typ

1

Sie können String Werte ("one", "two", "three") nicht in einer Liste speichern, die ArrayList<String> Werte speichern soll. Um die drei Zeichenfolgen zu speichern, müssen Sie eine neue Liste des Typs ArrayList<String> erstellen.

ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>(); 
rows = generateRows(); 
Set<String> set = new LinkedHashSet<String>(); 
for (ArrayList<String> list:rows) { 
    set.addAll (list); 
} 

//rows.clear(); 
//rows.add(new ArrayList<String>(set)); 

ArrayList<String> noDups = new ArrayList<String>(set); 

BTW,

  • Diese Linien ...

    ArrayList<ArrayList<String>> rows = new ArrayList<ArrayList<String>>(); 
    rows = generateRows(); 
    

    sind äquivalent zu

    ArrayList<ArrayList<String>> rows = generateRows(); 
    

     

  • Sie sollten anstelle von konkreten Klassen gegen Schnittstellen programmieren bevorzugen, also, wenn ich Sie bin ich es als

    List<List<String>> rows = generateRows(); 
    
Verwandte Themen