所以我想弄明白这一点。我做了一个名字的arraylist年龄必须按年龄,然后按名称排序(如果年龄相等)我确信有一个简单的方法来做到这一点,但我们的教训是要求我们使用接口。所以我到目前为止的是一个人名和年龄的数组列表,然后是一个人类,我可以从中检索信息。如何对要传递回主类的列表进行排序? PersonSorter:
import java.util.ArrayList;
import java.util.Collections;
public class PersonSorter
{
public static void main(String[] args)
{
ArrayList<Person> people = new ArrayList<Person>();
people.add(new Person("Linda", 63));
people.add(new Person("Jacob", 5));
people.add(new Person("Emily", 13));
people.add(new Person("Jessica", 21));
people.add(new Person("Emma", 5));
people.add(new Person("Robert", 80));
people.add(new Person("Jennifer", 43));
// PRINT THE LIST OF PEOPLE BEFORE SORTING
for (Person person : people)
{
System.out.println(person);
}
System.out.println();//space between the lists
Collections.sort(people);
// PRINT THE LIST OF PEOPLE AFTER SORTING
for (Person person : people)
{
System.out.println(person);
}
}
}
人:
public class Person implements Comparable<Person>
{
/** The person's name */
private int age;
/** The person's age */
private String name;
/**
* Constructs a new Person object with the given name and age
*
* @param age of the person
* @param name of the person
*/
public Person(String name, int age)
{
this.age = age;
this.name = name;
}
/**
*
* Returns the age of the person
*
* @return age
*/
public int getAge()
{
return age;
}
/**
*
* Sets the age of the person
*
* @param age
*/
public void setAge(int age)
{
this.age = age;
}
/**
* Returns the name of the person
*
* @return name
*/
public String getName()
{
return name;
}
/**
*
* Sets the name of the person
*
* @param name
*/
public void setName(String name)
{
this.name = name;
}
@Override
/**
* Returns a string representation of the person in the form:
* Person[name = [name], age = [age]]
*/
public String toString()
{
return "Person [name=" + name + ", age=" + age + "]";
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(Person o)
{
return 0;
}
}
人:
这是我将拉出数组列表并按年龄排序然后根据需要进行排序的类。
答案 0 :(得分:5)
你完成了大部分工作。只需在 Person 类中实现 compareTo :
@Override
public int compareTo(Person o) {
if (this.age != o.age) {
return this.age < o.age ? -1 : 1;
}
return this.name.compareTo(o.name);
}
方法 Collections.sort 根据 compareTo 方法提供的顺序对项目进行排序。
答案 1 :(得分:0)
public int compareTo(Person p) {
return this.age - p.age;
}
public static Comparator<Person> PersonComparator = new Comparator<Person>() {
public int compare(Person p1, Person p2) {
String firstPerson = p1.name;
String secondPerson = p2.name;
return firstPerson.compareTo(secondPerson);
}
};
将此代码添加到Person类:
如果您想按年龄分类,请尝试:
Arrays.sort(people);
如果要对名称进行排序,请尝试:
Arrays.sort(people, Person.PersonComparator);
答案 2 :(得分:0)
如果您不想继续创建多个组合比较器,那么您可以使用类似Group Comparator的内容。
答案 3 :(得分:0)
Google的Guava非常整洁ComparatorChain
。