当前位置: 首页 > 知识库问答 >
问题:

Java数组排序姓氏然后年龄[重复]

乐正锦
2023-03-14

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

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

人物类别:

 package myperson;
    public class Person {
    public String First;
    public String Last;
    public double Age;
    public Person(String first, String last,double age)
    {
    First = first;
    Last = last;
    Age = age;
    }  
    }

输出:

运行:

  Ordered by Last Name

切尔西·戴维斯

约翰·胡伯

苏珊·泰勒

斯科特·泽德伯格

  Sort by Age

切尔西·戴维斯

约翰·胡伯

苏珊·泰勒

斯科特·泽德伯格

生成成功(总时间:0秒)

共有1个答案

郑高驰
2023-03-14

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

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

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

people.sort(Comparator.comparing(Person::getName));
...
people.sort(Comparator.comparingInt(Person::getAge));
 类似资料:
  • 在这段代码中,只根据姓氏进行排序。我需要做的是将姓氏作为第一级排序,将名字作为第二级排序。 我希望姓氏作为第一级排序,名字作为第二级排序

  • 我的一个Java类分配要求我对多维字符串数组进行排序。它还需要输入您是想按名字排序还是按姓氏排序。我不太理解这个问题的措辞,也就是主要的排序和粗体部分,所以我会把它贴在这里。 编写一个程序,使用以下标题对二维数组进行排序: 该方法应先对行执行主排序,然后对列执行主排序。 使用以下数据测试您的程序: 您的程序应该询问您是希望数组按名字排序还是按最后一个sName排序。 数组中的行将包含名字。sort

  • 我在用户表中有一个名称字段。我将全名存储在一个字段中,首先是名字,然后是姓氏。 我想做的是将顺序更改为姓氏出现在第一,然后名字当我调用

  • 我有一个名为FullName的列的模型联系人,其中包含例如“John Smith”。 如何按全名列中显示的姓氏排序数据? 对于像“John Smith Doe”这样的长名称,我想按“Doe”这个词对数据进行排序。我使用postgres db

  • 问题内容: 我是Java 8的新手,我只想按名称排序。但条件是:如果名称重复,则应根据年龄对其进行排序。 例如我的输入是 并且输出应该是 但是我得到类似 表示仅按年龄或名称排序。 这是实现的代码: POJO类: 测试类别: 问题答案: 当前,您是a)仅按一个属性进行比较,b)并未真正利用Java 8的新功能。 使用Java 8,您可以使用方法引用和链接的比较器,如下所示: 这将首先按它们的实例比较

  • 问题内容: 我有一个基于运动的不同类型球员的arrayList。我需要按姓氏对arrayList中的播放器列表进行排序以开始。如果2个玩家的姓氏相同,则需要按名字对这2个玩家进行排序。示例:格式姓氏姓氏Williams Robert Phillips Warren Doe John Phillips Mark 输出应为Doe John Phillips Mark Phillips Warren W