2015-04-01 4 views
0

прочитать файл, где каждая строка выглядит следующим образом: userName, age, awardСортировка по индексу Java

мне нужно запрограммировать два сортировочных типа: by userName и by age. У меня не было проблем с первым, но я понятия не имею, как сортировать по возрасту в таком примере. Я попытался сменить имя с возрастом в каждой строке, но он не работает. Вот что я (это в принципе только чтение из файла и отображения его):

try{ 
      File file=new File(path); 
      BufferedReader read=new BufferedReader(new FileReader(file)); 
      String line=read.readLine(); 
      all+=line+"\n"; 
      while(line!=null){ 
       line=save.readLine(); 
       all+=line+"\n"; 
      } 

      String [] tabUsers=all.split("\n");  




      String display="";    
      for(int a=0;a<tabUsers.length-1;a++){   
       display+=tabUsers[a]+"\n"; 
      } 

      for(int c=0;c<tabUsers.length-1;c++){ 
        System.out.println(tabUsers[c]); 

     } 


     } 
     catch(Exception ex){ 

     } 

Любые идеи?

Я попытался это, но он не работает:

for(int b=0;b<tabUsers.length-1;b++){ 
       String eachLine =tabUsers[b]; 
       String [] splitLine=eachLine.split(","); 
       splitLine[0]=splitLine[1]; 
      } 
+1

Что значит «Я знаю об сортировке по имени ... но не по возрасту». Я просто не вижу различий, которые он делает, чтобы сортировать _alphabetically_ на 'String' или просто по отношению к естественному порядку на' int' ...? Можете ли вы показать, что вы делаете для имен? –

+0

Что касается имен, я просто использую эту строку: Arrays.sort (tabUsers, 0, tabUsers.length-1); – chatteVerte

+0

Вы пытались разделить каждую линию и получить возраст для них? Если у вас есть это, вы можете использовать его для сортировки, не так ли? –

ответ

0

Сначала получите имена и возрасты из каждой строки. Затем вы можете поместить вещи на две древовидные карты, один ключ имен и другие клавиши Age. Что-то вроде:

String[] lines = new String[3]; 
    lines[0] = "Michael 25 Award_1"; 
    lines[1] = "Ana 15 Award_2"; 
    lines[2] = "Bruno 50 Award_3"; 

    String[] parts; 
    Map<String, String> linesByName = new TreeMap<String, String>();   
    Map<Integer, String> linesByAge = new TreeMap<Integer, String>(); 

    for (String line : lines) { 
     parts = line.split(" "); 
     linesByName.put(parts[0], line); 
     linesByAge.put(Integer.parseInt(parts[1]), line); 
    } 

    System.out.println("Sorted by Name:"); 

    for (Map.Entry<String, String> entry : linesByName.entrySet()) { 
     System.out.println(entry.getValue()); 
    } 

    System.out.println("\nSorted by Age:"); 

    for (Map.Entry<Integer, String> entry : linesByAge.entrySet()) { 
     System.out.println(entry.getValue()); 
    } 
1

Считывание данных в коллекции объектов, как это:

public class User { 
    final String name; 
    final int age; 
    final String award; 

    public User(String name, int age, String award) { 
     this.name = name; 
     this.age = age; 
     this.award = award; 
    } 
} 

Затем использовать Collections.sort и Comparator<User> для сортировки:

User bob = new User("Bob", 44, null); 
User zack = new User("Zack", 13, null); 
List<User> users = Arrays.asList(bob, zack); 

//sort by age 
Collections.sort(users, new Comparator<User>() { 
    @Override 
    public int compare(User user1, User user2) { 
     return Integer.compare(user1.age, user2.age); 
    } 
}); 

//sort by name 
Collections.sort(users, new Comparator<User>() { 
    @Override 
    public int compare(User user1, User user2) { 
     return user1.name.compareTo(user2.name); 
    } 
}); 
Смежные вопросы