gpt4 book ai didi

java - 在多个字段上排序 - 它可以工作,但无法理解它是如何工作的。

转载 作者:行者123 更新时间:2023-12-04 05:50:34 26 4
gpt4 key购买 nike

class Employee implements Comparable{
private String name;
private String gender;

Employee(String name, String gender) {
this.name = name;
this.gender = gender;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public String toString() {
return this.getName() + " : " + this.getGender();
}

@Override
public int compareTo(Object o) {
int gendarComp=this.getGender().compareTo(((Employee)o).getGender());
return (gendarComp!=0?gendarComp:this.name.compareTo(((Employee)o).getName()));
}
}

class EmployeeExec {
public static void main(String[] args) {
List allEmpls = new ArrayList();
allEmpls.add(new Employee("vijay", "m"));
allEmpls.add(new Employee("balaji", "m"));
allEmpls.add(new Employee("shaifali", "f"));
allEmpls.add(new Employee("archana", "f"));
allEmpls.add(new Employee("alala", "m"));
allEmpls.add(new Employee("kiran", "f"));

sortEmployees(allEmpls);
}

public static void sortEmployees(List allEmpls) {
Collections.sort(allEmpls);
System.out.println(allEmpls);
}
}

任何人都可以帮助我了解它是如何工作的吗?排序的基础是什么。我保留了一些 sysout 语句以供查看,但我真的不明白它是如何被调用的。我知道它与合并排序一起工作。但是怎么样?请帮我。

-巴拉吉

最佳答案

排序基于compareTo的返回值(稍微重新格式化以提高可读性):

@Override
public int compareTo(Object o) {
int gendarComp = this.getGender().compareTo(((Employee)o).getGender());
return (gendarComp != 0
? gendarComp
: this.name.compareTo( ((Employee)o).getName() )
);
}

逻辑显然是比较 getGender() 的值并返回该比较,除非它们测试相等。如果它们相等,则返回名称比较的结果。

顺便说一句:如果这是您的代码,最好使用泛型而不是原始类型。宣布
class Employee implements Comparable<Employee> {...

然后声明 compareTo带有签名的方法:
@Override
public int compareTo(Employee o) {...

并且您可以省去方法内部的强制转换(以及提高客户端代码中的类型安全性)。

关于java - 在多个字段上排序 - 它可以工作,但无法理解它是如何工作的。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com