2017-05-09 3 views
1

Ich habe die folgende Funktion. Es empfängt eine Array-Liste.Java: Erstellen Sie eine separate sortierte Arraylist unter Beibehaltung der ursprünglichen Liste

Auf meiner GUI habe ich eine Schaltfläche, die zwischen zwei Zuständen wechselt. Eine, die die Liste in alphabetischer Reihenfolge sortiert, und eine, die die Liste in der Reihenfolge ihres Erscheinens ausgibt.

Beachten Sie, dass ich die Arraylist aus einer externen Datei befülle, und dass ich diese Datei in einer anderen Funktion öffne, sodass das erneute Öffnen der Datei und das erneute Füllen des Listenarrays mit seinem Inhalt unnötig erscheint.

Wie es jetzt ist, sortiert sich die Liste alphabetisch, aber nicht in der ursprünglichen Reihenfolge.

Wie kann ich eine separate Liste erstellen, die die sortierte Liste enthält, während meine ursprüngliche Liste in Reihenfolge bleibt?

Dank

sortButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       if (sortButton.getText().equals("Sort by Route")){ 
        sortButton.setText("Sort Alphabetically"); 
         Journey value = mapper.get(objectName); 
         ArrayList stops = value.getNewStop(); //loads an arraylist into stops 
         System.out.println(stops); 
        } 
       } 

       else if (sortButton.getText().equals("Sort Alphabetically")){    
        sortButton.setText("Sort by Route");     
         Journey value = mapper.get(objectName); 
         ArrayList stopsSorted = value.getNewStop(); // use the arraylist attribute 
         Collections.sort(stopsSorted); 
         System.out.println(stopsSorted); 
        } 
       } 
      } 
     }); 

Antwort

1

ich die ArrayList hält String s zu übernehmen gehen:

ArrayList<String> stopsSorted = new ArrayList<>(value.getNewStop()); // use the arraylist attribute 
Collections.sort(stopsSorted); 
System.out.println(stopsSorted); 

Wie Sie sehen können, wir die ArrayList passieren, dass wir nicht wollen, in das ändern Erbauer eines neuen ArrayList<String>.

+0

Vielen Dank, wird die Antwort in ein paar Minuten akzeptieren. –

+0

Gern geschehen! –

+0

@ JonGoe darauf achten, dass diese Methode einen flachen Klon macht, ist es kein Problem für eine unveränderliche Art (welche "String" ist), aber für den Fall, dass Sie veränderbare Objekte im Inneren halten ... – niceman

0

Sie sollten in der Lage sein, die ursprüngliche Liste zu klonen und den Klon zu sortieren. Dann wechseln Sie einfach, was Sie zeigen - sortierte Liste oder ursprüngliche Liste.

ArrayList stopsSorted = stops.clone() 
Collections.sort(stopsSorted); 
System.out.println(stopsSorted) 
Verwandte Themen