Ein Array zweimal verschieden sortieren - Wie speichern?

SolvencyII

Mitglied
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?

Code:
        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;
        }

Code:
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;
    }

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

Robat

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

Java:
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:

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

Aufsteigend:
[0, 1, 2, 3]

Absteigend:
[3, 2, 1, 0]

Gruß Robert
 

Cromewell

Top Contributor
Wenn du die Daten nicht direkt weiterverwendest, bevor du neu sortierst, ja :D
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)
 

Neue Themen


Oben