gpt4 book ai didi

java - 关于比较器条件

转载 作者:行者123 更新时间:2023-12-01 15:23:45 25 4
gpt4 key购买 nike

我在下面开发了使用比较器的方法..

这是我的pojo..

  class Emp
{
String name,job;
int salary;
public Emp(String n,String j,int sal)
{
name=n;
job=j;
salary=sal;
}
public void display()
{
System.out.println(name+"\t"+job+"\t"+salary);
}
public boolean equals(Object o)
{
Emp p=(Emp)o;
return this.name.equals(p.name)&&this.job.equals(p.job) &&this.salary==p.salary;
}
public int hashCode()
{
return name.hashCode()+job.hashCode()+salary;
}

}

这是我的用户定义的集合集合类..

  ArrayList list=new ArrayList();
list.add(new Emp("Ram","Trainer",34000));
list.add(new Emp("Sachin","Programmer",24000));
list.add(new Emp("Priyanka","Manager",54000));
list.add(1,new Emp("Ravi","Administrator",44000));
list.add(new Emp("Anupam","Programmer",34000));
list.add(new Emp("Sachin","Team Leader",54000));
System.out.println("There are "+list.size()+" elements in the list.");
System.out.println("Content of list are : ");
ListIterator itr=list.listIterator();
System.out.println("Sort Object according to Salary");
Collections.sort(list,new SalaryComparator());
System.out.println("Content of list are : ");
itr=list.listIterator();
while(itr.hasNext())
{
Emp e=(Emp)itr.next();
e.display();
}
}

最后是我的比较器类

class SalaryComparator
implements Comparator
{
public int compare(Object paramObject1, Object paramObject2)
{
Emp localEmp1 = (Emp)paramObject1;
Emp localEmp2 = (Emp)paramObject2;
return localEmp1.salary - localEmp2.salary;
}
}

现在它是根据薪水按升序排序,但请建议我如何在比较器中实现逻辑,以便首先根据薪水排序,然后根据工作排序,即先是薪水,然后是工作,请指教。

最佳答案

您始终可以在比较器函数中包含多重比较。在这种情况下:

class SalaryComparator
implements Comparator
{
public int compare(Object paramObject1, Object paramObject2)
{
Emp localEmp1 = (Emp)paramObject1;
Emp localEmp2 = (Emp)paramObject2;
int salaryDiff = localEmp1.salary - localEmp2.salary;
if (salaryDiff != 0) {
return salaryDiff;
} else {
if (localEmp1.job == null) {
if (localEmp2.job == null) {
return 0;
} else {
return 1;
}
} else {
if (localEmp2.job == null) {
return -1;
} else {
return localEmp1.job.compareTo(localEmp2.job);
}
}
}
}
}

这种空检查设置将没有作业值的 Emp 实例放在字母顺序的末尾。

关于java - 关于比较器条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10486170/

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