2013-04-24 5 views
0

Я изучаю финал, и я смотрю на вопрос из моего промежуточного уровня, что я ошибся и честно не знал, как это сделать. Вопрос заключается в следующем:Rewrite class для ArrayList - Java

Перепишите класс Person, так что если у вас есть ArrayList личностно объектов, ArrayList, вы можете сортировать его с помощью Коллекции сортировать метод. Метод сортировки должен сначала отсортировать список, уменьшив возраст , а затем в алфавитном порядке (для людей того же возраста).

Этот же код (Person class), который был указан в вопросе ниже.

public class Person { 
    public String name; 
    public int age; 
} 

Это был промежуточный вопрос, поэтому мне пришлось написать код. Мне интересно, какой эффективный и правильный способ ответить на этот вопрос. Все ответы или ввод приветствуются. Спасибо.

+0

, как это то, что дубликат лол ... – choloboy7

+1

нет, это не dupliucate.It необходимости с двумя полями – PSR

+0

@ choloboy7 Вы пытаетесь сортировать ArrayList обычая объекты по свойству :) –

ответ

1

Внесите в класс Person интерфейс Comparable и обеспечите реализацию метода CompareTo.

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

public class Person implements Comparable<Person> { 
    public String name; 
    public int age; 

    @Override 
    public int compareTo(Person person) { 
     return new Integer(this.age).compareTo(person.age); 
    } 


    public static void main(String[] args) { 
     Person person = new Person(); 
     person.name = "Kevin"; 
     person.age = 28; 
     Person person2 = new Person(); 
     person2.name="Bob"; 
     person2.age = 40; 
     Person person3 = new Person(); 
     person3.name="Joe"; 
     person3.age = 90; 

     List<Person> people = new ArrayList<Person>(); 
     people.add(person2); 
     people.add(person3); 
     people.add(person); 

     Collections.sort((List<Person>)people); 

     for(Person p:people){ 
      System.out.println(p.name); 
     } 
    } 

} 
2

Я хотел бы отметить, @Kevin Бауэрсокс ответить, что его ответ сортировку по возрастанию возраста и не принимать во внимание второго сорта по имени. Заменить СотрагеТо с этим, чтобы решить эти две проблемы

@Override 
public int compareTo(Person person) 
{ 
    int ageSort = new Integer(person.age).compareTo(this.age); 

    // If the ages aren't the same 
    if(ageSort != 0) 
    { 
     return ageSort; 
    } 

    // otherwise sort on name alphabetically 
    return name.compareTo(person.name); 
} 
Смежные вопросы