2015-02-17 3 views
0

Как отсортировать имя пользователя ArrayList по фамилии пользователей? Моя программа печатает имена по порядку по имени. Есть ли еще метод collections.sort(..);? Или способ без создания карты.Как отсортировать ArrayList по имени пользователя

public static void main(String[] args) throws FileNotFoundException { 
    String check = "y"; 
    do { 
     Scanner fileRead = new Scanner(System.in); 
     System.out.println("Enter the name of the file: "); 
     File myFile = new File(fileRead.next()); 
     ArrayList<String> names = new ArrayList<>(); 

     Scanner scanTwo = new Scanner(myFile); 

     while (scanTwo.hasNextLine()) { 
      names.add(scanTwo.nextLine()); 
     } 
     Collections.sort(names); 
     for (String name : names) { 
      System.out.println(name); 
     } 

     System.out.println(); 
     Scanner ans = new Scanner(System.in); 
     System.out.println("Add another? y/n "); 
     check = ans.next(); 
    } while (check.equals("y")); 
} 
+3

Вам нужно создать пользовательский компаратор, который переопределяет compare(), а затем сравнивает lastnames. Затем вызовите Arrays.sort(), передав ему компаратор. – TheLostMind

ответ

0

Использование Person класса, который будет осуществлять Comparable<Person> интерфейс, как:

public class Person implements Comparable<Person> { 
    String fname; 
    String lname; 
    //getter setter 
    public int compareTo(Person person) { 
     int comparedFname = this.fname.compareTo(person.getFname()); 
     if (comparedFname == 0) {//if fname are same then compare by last name 
      return this.lname.compareTo(person.getLname()); 
     } 
     return comparedFname; 
    } 
} 

Затем вы можете создать список объектов Person и использовать Collections.sort метод для сортировки списка.

+0

Вы также можете использовать 'Collections.sort (List list, Comparator c)' и передать 'Comparator', это позволит сортировать список по-разному, если это необходимо. – PeterK

+0

согласился. Я дал конкретную реализацию. – SMA

Смежные вопросы