2017-03-03 7 views
0

Ich habe eine benutzerdefinierte ArrayList. Ich muss diese ArrayList in einer bestimmten Reihenfolge in Bezug auf ein Ganzzahl-Array neu anordnen. Z. BArrayList in Java neu anordnen

List<String> test = new ArrayList();   
    test.add("red"); 
    test.add("green"); 
    test.add("blue"); 
int [] X = {2,0,1}; 

neu ordnen, um diese Arraylist w.r.t X-Array. dh Artikel im 2. Index sollte auf Platz 3 zu 1., 0. Artikel an 2. Position und ersten Punkt kommen

ausgegeben werden soll:

blue 
red 
green 

Ich weiß, wie es zu tun, nur mit for-Schleife wissen wollen, ob es gibt eine bessere Lösung als diese.

+2

Wie wäre es eine Klasse erstellen, die 'ID' und' color' als Felder. Und dann machen Sie 'ArrayList' dieser Klasse und sortieren sie dann mit einem benutzerdefinierten Vergleicher basierend auf' ID'? –

+0

Abgesehen von der Erstellung einer neuen Wrapper-Klasse, die nach ID sortiert werden kann, sehe ich keinen sauberen Weg. –

+0

Eigentlich ist es kein Duplikat dieser Frage, in diesem Fall wird benötigt, um Elemente in benutzerdefinierter Reihenfolge zu verschieben, nicht die Position – RudiDudi

Antwort

0

Sie können eine Map erstellen und die ganze Zahl dem Stringwert zuordnen.

Iterieren Sie das Referenz-Array und lassen Sie es anhand Ihrer Bestellung aufgelistet werden.

Snippet:

Map<Integer,String> maps = new HashMap<Integer,String>(); 
maps.put(1,"Red"); 
maps.put(2,"White"); 

for(Integer a : values){ 
    System.out.println(maps.get(a)); 
} 
+0

Eine TreeMap wäre besser geeignet –

+0

Nicht erforderlich. Wir gehen bei diesem Ansatz nicht zum Sortiermechanismus ... Wir ordnen Werte zu und wir zeigen den Wert basierend auf der Array-Reihenfolge an. Die Einführung von TreeMap wird etwas komplexer sein, wenn man den Wert im Vergleich zu HashMap hinzufügt ... – sitakant

+0

Aber die Eingabe ist eine Liste, keine Map und die Ausgabe sollte auch eine Liste und kein Text in der Konsole sein. Ihre Lösung entspricht also nicht den Anforderungen – Jens

-1

können Sie verwenden

Collections.swap(test,1,2); 
Collections.swap(test,2,3); 

Dokumentation Here

+0

Argument nach unten – RudiDudi