gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:24:48 24 4
gpt4 key购买 nike

所以我正在尝试解决这个问题。我制作了一个带有年龄的姓名数组列表,必须按年​​龄排序,然后按姓名排序(如果年龄相等)我确信有一种简单的方法可以做到这一点,但我们的类(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/

24 4 0
文章推荐: ios - 如何使用自动布局来布局三个项目水平相等
文章推荐: java - 日期不进行比较
文章推荐: java - 将图像添加到 JFrame 时出现问题
文章推荐: javascript - 如何修改 Material-UI