java - 如何按2个约束排序?

标签 java

所以我正在尝试解决这个问题。我制作了一个带有年龄的姓名数组列表,必须按年​​龄排序,然后按姓名排序(如果年龄相等)我确信有一种简单的方法可以做到这一点,但我们的类(class)要求我们使用接口(interface)。所以到目前为止我所拥有的是一个包含人员姓名和年龄的数组列表,然后是一个充满方法的人员类,我可以从中检索信息。如何对要传递回主类的列表进行排序? 人物排序器:

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;
    }

}

人物:

在这个类中,我将提取数组列表并按年龄排序,然后根据需要按名称排序。

最佳答案

您已经完成了大部分工作。只需在您的 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方法提供的顺序对项目进行排序。

关于java - 如何按2个约束排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15864758/

相关文章:

java - Apache Tomcat部署某个.war文件后启动不完成

java - 当通过 testng 框架执行时,我的 selenium 测试未从 cmd 或 Jenkins 运行。结果 : Total tests run: 0, 失败 : 0, 跳过:0

java - 如何从 flickr 加载原始图像?

java - 即使运行突然终止,我们如何才能在 TestNG 中获得成功运行测试的结果?

java - 树遍历

Java CASE 为什么我在使用和不使用 ' ' 的情况下得到完全不同的结果

java - JOGL - 照明/相机

java - 如何将 JPanel 变成 BufferedImage Java

java - 如何以与文件夹中存在的顺序相同的顺序获取文件?

java - 如何创建到 tempdir tomcat 的虚拟路径?