2017-07-09 4 views
1

Ich versuche herauszufinden, wie die ArrayLists, die aus einer TXT-Datei kommen, zu sortieren. Ich möchte sie alphabetisch nach Namen sortieren können. Hier ist ein Beispiel dafür, wie die txt-Datei aufgeführt ist:Sortierung mehrerer Arraylists in Java

Alvarez, Eliezer 
74 
2B 
IA 
22 
Bowman, Matt 
67 
P 
A 
26 

Jedes Stück ist auf einer einzigen Zeile von selbst (außer Nachname, Vorname auf einer Linie zusammen sein).

Gibt es eine Möglichkeit, eine Sortierung der Sammlungen vorzunehmen, die den Rest der Arraylisten, die auf dem Namen Arraylist basieren, anpassen? Vielen Dank.

Scanner keyboard = new Scanner(System.in); 
    String filename; 
    fileName = "cardinals.txt"; 

    File baseball = new File(fileName); 
     if (!baseball.exists()) { 
      System.out.println("The input file was not found."); 
      System.exit(0); 
     } 

    ArrayList<String> name = new ArrayList<>(); 
    ArrayList<Integer> number = new ArrayList<>(); 
    ArrayList<String> position = new ArrayList<>(); 
    ArrayList<String> status = new ArrayList<>(); 
    ArrayList<Double> age = new ArrayList<>(); 

    Scanner stats = new Scanner(baseball); 

    if (!stats.hasNext()) { 
     System.out.println("The file is empty."); 
    } 
    else { 
     while (stats.hasNext()) { 
      name.add(stats.nextLine()); 
      number.add(stats.nextInt()); 
      position.add(stats.next()); 
      status.add(stats.next()); 
      age.add(stats.nextDouble()); 
      try { 
       stats.nextLine(); 
      } catch (Exception e) { 
      } 
     } 
    } stats.close(); 
    sortArrayPosition(); 

    sortArrayPosition (ArrayList<String> name, ArrayList<Integer> number, ArrayList<String> position, ArrayList<String> status, ArrayList<Double> age) { 
+4

Warum nicht ein Objekt, dann kleben Sie die Daten in das Objekt? Dann brauchen Sie nur eine Liste von Objekten, und Sie können nur basierend auf dem Namensfeld sortieren. – Carcigenicate

Antwort

3

Beim Organisieren und Verwalten komplexer Daten ist die Verwendung eines Objekts zum Gruppieren der Daten der beste Ansatz.

Hier ist ein Beispiel, ein Objekt unter Verwendung der Informationen zu speichern:

package example; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Comparator; 
import java.util.List; 
import java.util.Scanner; 

class StatisticsReader { 
    private static class PlayerStats { 
     String name; 
     Integer number; 
     String position; 
     String status; 
     Double age; 

     public PlayerStats(String name, Integer number, String position, String status, Double age) { 
      this.name = name; 
      this.number = number; 
      this.position = position; 
      this.status = status; 
      this.age = age; 
     } 

     @Override 
     public String toString() { 
      return "PlayerStats{" + 
        "name='" + name + '\'' + 
        ", number=" + number + 
        ", position='" + position + '\'' + 
        ", status='" + status + '\'' + 
        ", age=" + age + 
        '}'; 
     } 
    } 
    public static void main(String[] args) { 
     File baseball = new File("cardinals.txt"); 
     if (!baseball.exists()) { 
      System.out.println("The input file was not found."); 
      System.exit(0); 
     } 
     List<PlayerStats> statsList = new ArrayList<>(); 
     try (Scanner stats = new Scanner(baseball)) { 
      if (!stats.hasNext()) { 
       System.out.println("The file is empty."); 
      } 
      else { 
       while (stats.hasNext()) { 
        String name = stats.nextLine(); 
        Integer number = stats.nextInt(); 
        String position = stats.next(); 
        String status = stats.next(); 
        Double age = stats.nextDouble(); 
        statsList.add(new PlayerStats(name, number, position, status, age)); 
        stats.nextLine(); 
       } 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     statsList.sort(Comparator.comparing(o -> o.name)); 
     statsList.forEach(System.out::println); 
    } 
} 

Sie können die Methode toString() anpassen, um die Ausgabe bei Bedarf zu ändern.

Verwandte Themen