【问题标题】:Java array sorting of last names then age [duplicate]Java数组排序姓氏然后年龄[重复]
【发布时间】:2018-09-18 07:17:23
【问题描述】:

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

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 秒)

【问题讨论】:

  • 首先,变量名不应以大写字符开头。遵循 Java 约定。要使用不同的 Comparator 进行排序,请查看:: stackoverflow.com/questions/28008497/sort-by-name-object-java/…
  • 请使用正确的缩进。否则你的代码很难阅读。
  • 所谓的“重复”答案不能回答这个问题。那是关于在同一操作中按多个标准进行排序。这是关于按不同标准多次排序。

标签: java arrays sorting arraylist collections


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2013-11-03
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多