姓氏和年龄的Java数组排序

姓氏和年龄的Java数组排序,java,arrays,sorting,arraylist,collections,Java,Arrays,Sorting,Arraylist,Collections,我编写了一个使用排序的程序,首先按条目的姓氏对数组列表进行排序,然后按其年龄进行排序,从而创建两个列表作为输出。问题是姓氏排序似乎很有效,但年龄排序总是将姓名按姓氏排序的相同顺序排列。 这是到目前为止我的代码,我有两个类 package myperson; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Queue implements Compa

我编写了一个使用排序的程序,首先按条目的姓氏对数组列表进行排序,然后按其年龄进行排序,从而创建两个列表作为输出。问题是姓氏排序似乎很有效,但年龄排序总是将姓名按姓氏排序的相同顺序排列。 这是到目前为止我的代码,我有两个类

package myperson;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Queue implements Comparable<Queue> {
public Person Data;
public int iter=0;
public Queue(String first, String last,int age)
{
Data = new Person(first, last, age);
}
@Override
public int compareTo(Queue other)
{
if(iter==0){
iter++;
return Data.Last.compareTo(other.Data.Last);
}
else
return Double.compare(Data.Age, other.Data.Age);
}
@Override
public String toString() {

return Data.First + " " + Data.Last;
}
public static void main(String[] args) throws java.io.IOException {
ArrayList list = new ArrayList();
String first;
String last;
int age = 0;
Scanner sc=new Scanner(System.in);

list.add(new Queue("John", "Huber", 22));
list.add(new Queue("Chelsea", "Davis", 32));
list.add(new Queue("Susan", "Taylor", 46));
list.add(new Queue("Scott", "Zedburg", 59));

System.out.println("Ordered by Last Name");
Collections.sort(list);
for (int i = 0; i < list.size(); i++)
{
System.out.println(list.get(i));
}
System.out.println("\nSort by Age");
Collections.sort(list);
for (int i = 0; i < list.size(); i++)
{
System.out.println(list.get(i));
}
}
}
输出:

运行:

切尔西戴维斯

约翰·胡伯

苏珊·泰勒

斯科特·泽德堡

  Sort by Age
切尔西戴维斯

约翰·胡伯

苏珊·泰勒

斯科特·泽德堡

  Sort by Age

构建成功(总时间:0秒)

不幸的是,这段代码中有很多问题。您正试图在比较函数中使用一个变量来更改其行为。这打破了许多关于比较函数应该如何工作的规则。阅读
Compariable
的文档,了解完整的规则和约定

更好的方法是在调用sort时指定比较函数。您的最终排序代码应该如下所示:

List<Person> people = new ArrayList<>();
...

people.sort(Comparator.comparing(Person::getName));
...
people.sort(Comparator.comparingInt(Person::getAge));
List people=new ArrayList();
...
排序(Comparator.comparing(Person::getName));
...
Person.sort(Comparator.comparingit(Person::getAge));

首先,变量名不应以大写字符开头。遵循Java约定。对于使用不同比较器进行排序,请检查::请使用适当的缩进。否则代码很难阅读。假定的“重复”答案不能回答此问题。即在同一操作中按多个条件进行排序。这是关于按不同标准多次排序。
List<Person> people = new ArrayList<>();
...

people.sort(Comparator.comparing(Person::getName));
...
people.sort(Comparator.comparingInt(Person::getAge));