2016-06-13 5 views
0

Wenn ich eine begriffliche Master-Liste der Einträge nach Priorität/Reihenfolge bestellt haben:Wie sortiere ich eine kleine Liste von Elementen basierend auf einer Mastersequenzliste?

1. dog 

2. cat 

3. fish 

4. bunny 

5. hamster 

Und eine andere Liste kommt zusammen mit den Werten

["bunny", "dog", "fish"] 

Wie sortiere ich die Eingangsliste auf dem Master-Basis Liste? Also, in diesem Beispiel würde ich erwarten, dass die zweite Liste

nach Sortierung ergibt.

Ich könnte manuell eine Funktion schreiben, um dies zu implementieren, aber ich fühle mich wie Java bereits eine Art eingebauter und optimierter Weg, um diese Art von Sache zu tun. Was ist der beste Weg, um diese Art der Sortierung von Listen in Java zu erreichen?

+0

Verwandte http://stackoverflow.com/questions/18129807/in-java-how-do-you-sort- one-list-based-on-another – Tunaki

+0

Verwenden Sie TreeSet <>(). Es implementiert auch Collection, wie ArrayList <>(); Sie können TreeSet zu Ihrer ArrayList hinzufügen. TreeSet sortiert Zeichenfolgen automatisch. – LowLevel

Antwort

2

Sie können eine Kopie des Masters erstellen und die Methode List#retainAll verwenden, um die Reihenfolge im Master beizubehalten.

Beispiel:

// Master list 
List<String> master = new ArrayList<>(Arrays.asList("dog", "cat", "fish", "bunny", "hamster")); 

// list to sort with respect to master  
List<String> listToSort = new ArrayList<>(Arrays.asList("bunny", "dog", "fish")); 

// copy of master 
List<String> masterCopy = new ArrayList<>(master); 

// keep only the items in masterCopy that are in the listToSort 
masterCopy.retainAll(listToSort); 

System.out.println(masterCopy); 

Ausgänge:

[dog, fish, bunny] 
2
  1. Prozess die Liste in eine Karte, so dass masterList.get("bunny") = 4 usw.
  2. Schreiben Sie Ihre eigene Comparator mit

    int compare(String a, String b) { 
        return masterList.get(a) - masterList.get(b); 
    } 
    

Jede Lösung hat O (Anzahl der Elemente in der größten sein Liste) im schlimmsten Fall, weil Sie die gesamte große Liste durchsuchen müssen, nur um die Positionen der Elemente in der Liste zu finden, die Sie sortieren.

Verwandte Themen