# Ein Array zweimal verschieden sortieren - Wie speichern?



## SolvencyII (25. Mrz 2017)

Hallo!

Ich habe ein Array und muss es zweimal nach verschiedenen Spalten sortieren. Mein (zugegebenermaßen) komisches Problem ist, dass ich nicht weiß wie ich die sortierten Arrays dann abspeichern kann. Das ursprüngliche ist ja gespeichert, aber wie kann ich die neu sortieren abspeichern? Wie erstelle ich ein leeres Array und überschreibe es komplett?


```
public static List<Flughafen> leseCsvDaten() {
            try (FileReader fr = new FileReader("./my-module/src/airports.csv");
            BufferedReader reader = new BufferedReader(fr)){
                return processFile(reader);
            } catch (FileNotFoundException e){
                e.printStackTrace();
                out.println("Daten konnten nicht gelesen werden. Das ist schade.");
                exit(0);
            } catch (IOException e) {
            e.printStackTrace();
                out.println("Daten konnten nicht gelesen werden. Das ist schade.");
                exit(0);
            }
        return null;
        }
```


```
private static List<Flughafen> processFile(BufferedReader reader) throws IOException{
            String header = reader.readLine();
            String line;
            List<Flughafen> flughaefen = new ArrayList<>();
            while ((line = reader.readLine()) != null){
            //System.out.println(line);
            //String[] tokens = line.split(";");
            Flughafen m = new Flughafen(line);
            //m.id = (int) Float.parseFloat(tokens[0]);
            flughaefen.add(m);
        }
        System.out.println("Gelesene Flughäfen: " + flughaefen.size());
            return flughaefen;
    }
```


```
// Einlesen der Daten in eine map Datenstruktur
        List<Flughafen> flughaefen = leseCsvDaten();
        Collections.sort(flughaefen, (a1,a2) -> {return a1.getCountry().compareTo(a2.getCountry());});
```


----------



## Cromewell (25. Mrz 2017)

SolvencyII hat gesagt.:


> Collections.sort


Hiernach sollte die Liste sortiert sein, und die kannst sie weiter verwenden.


----------



## SolvencyII (26. Mrz 2017)

Cromewell hat gesagt.:


> Hiernach sollte die Liste sortiert sein, und die kannst sie weiter verwenden.


Aber ich will sie ja zweimal verschieden sortieren. Und wenn ich das versuchen würde, würde sie sich ja zweimal überschreiben, oder?


----------



## Robat (26. Mrz 2017)

Du könntest deine List 2 mal duplizieren und die Sortierung auf die anderen 2 anwenden.
Also bspw:


```
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(3);
list.add(1);
list.add(0);

List<Integer> list1 = new ArrayList<>(list);
List<Integer> list2 = new ArrayList<>(list);

Collections.sort(list1, (a1,a2) -> { return a1.compareTo(a2);});
Collections.sort(list2, (a1,a2) -> { return a2.compareTo(a1);});

System.out.println("Original:\n"        + list);
System.out.println("\nAufsteigend:\n"   + list1);
System.out.println("\nAbsteigend:\n"    + list2);
```

Output sehe dann wie folgt aus:


```
Original:
[2, 3, 1, 0]

Aufsteigend:
[0, 1, 2, 3]

Absteigend:
[3, 2, 1, 0]
```

Gruß Robert


----------



## Cromewell (26. Mrz 2017)

Wenn du die Daten nicht direkt weiterverwendest, bevor du neu sortierst, ja 
Ich würde es auch so machen wie @Robat, aber scheint mir nicht wirklich elegant. Wüsste aber auf die schnelle keine andere Möglichkeit x)


----------



## SolvencyII (26. Mrz 2017)

Danke! Einfache Lösung, aber genau das, was mir gefehlt hatte!


----------

