Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按2个约束进行排序?_Java - Fatal编程技术网

Java 如何按2个约束进行排序?

Java 如何按2个约束进行排序?,java,Java,所以我想弄明白。我制作了一个带有年龄的名称的数组列表,必须按年龄排序,然后按名称排序(如果年龄相等),我相信有一种简单的方法可以做到这一点,但我们的课程要求我们使用接口。到目前为止,我得到的是一个人名和年龄的数组列表,然后是一个person类,其中包含了我可以从中检索信息的方法。如何对要传递回主类的列表进行排序? 个人分拣员: import java.util.ArrayList; import java.util.Collections; public class PersonSorter

所以我想弄明白。我制作了一个带有年龄的名称的数组列表,必须按年龄排序,然后按名称排序(如果年龄相等),我相信有一种简单的方法可以做到这一点,但我们的课程要求我们使用接口。到目前为止,我得到的是一个人名和年龄的数组列表,然后是一个person类,其中包含了我可以从中检索信息的方法。如何对要传递回主类的列表进行排序? 个人分拣员:

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);
        }
    }
}
import java.util.ArrayList;
导入java.util.Collections;
公共类个人排序器
{
公共静态void main(字符串[]args)
{
ArrayList people=新建ArrayList();
添加(新人物(“Linda”,63));
添加(新人物(“Jacob”,5));
添加(新人物(“Emily”,13));
新增(新人(“杰西卡”,21岁));
添加(新人物(“Emma”,5));
新增(新人(“罗伯特”,80岁));
添加(新人物(“詹妮弗”,43));
//排序前打印人员列表
用于(人:人)
{
系统输出打印项次(人);
}
System.out.println();//列表之间的空格
收藏。分类(人);
//排序后打印人员列表
用于(人:人)
{
系统输出打印项次(人);
}
}
}
人:

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对象
* 
*@param人的年龄
*@param此人的姓名
*/
公众人物(字符串名称,整数年龄)
{
这个。年龄=年龄;
this.name=名称;
}
/**
* 
*返回此人的年龄
*
*@回归年龄
*/
公共整数getAge()
{
回归年龄;
}
/**
* 
*设置此人的年龄
*
*@param年龄
*/
公共无效设置(整数)
{
这个。年龄=年龄;
}
/**
*返回此人的姓名
* 
*@returnname
*/
公共字符串getName()
{
返回名称;
}
/**
* 
*设置人员的名称
*
*@param name
*/
公共void集合名(字符串名)
{
this.name=名称;
}
@凌驾
/**
*返回人员的字符串表示形式,格式为:
*个人[姓名=[姓名],年龄=[年龄]]
*/
公共字符串toString()
{
返回“Person[name=“+name+”,age=“+age+””;
}
/*(非Javadoc)
*@see java.lang.Comparable#compareTo(java.lang.Object)
*/
@凌驾
公共内部比较(o人)
{
返回0;
}
}
人民:


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

您已经完成了大部分工作。只需在Person类中实现compareTo:

@覆盖
公共内部比较(o人){
if(this.age!=o.age){
返回此.age

方法集合。排序根据compareTo方法提供的顺序对项目进行排序。

您已经完成了大部分工作。只需在Person类中实现compareTo:

@覆盖
公共内部比较(o人){
if(this.age!=o.age){
返回此.age
方法Collections.sort根据compareTo方法提供的顺序对项目进行排序

如果要按名称排序,请尝试:

Arrays.sort(people, Person.PersonComparator); 
如果要按名称排序,请尝试:

Arrays.sort(people, Person.PersonComparator); 

如果你不想继续创建多个组合比较器,那么你可以使用像a这样的东西。

如果你不想继续创建多个组合比较器,那么你可以使用像a这样的东西。

谷歌的番石榴有一个非常干净的。谷歌的番石榴有一个非常干净的。

天哪,就这么简单!在这里,我无法通过我写的代码,认为我做错了什么。Thanx Maroun和Grzegorz,你真是个甜心!天哪,就这么简单!在这里,我无法通过我写的代码,认为我做错了什么。Thanx Maroun和Grzegorz,你真是个甜心!
    Arrays.sort(people);
Arrays.sort(people, Person.PersonComparator);