java - 关于比较器条件

标签 java

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

这是我的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/

相关文章:

java - 短时间间隔重复方法

java - 如何在浏览器和 Java Web Start 小程序之间进行通信

java - spring-social-twitter,@Value 不连接属性

java - 找不到“org.springframework.kafka.core.ConsumerFactory”

java - 如何将包含字符转义序列的字符串转换为 char?

java - 如何显示两个String对象是否发生变化?

java - 从 Android 中的 apk 文件中读取 Activity 名称

java - 单元测试 - 在哪里放置初始化代码?

java - 如何延迟程序以便在文本之间有停顿?

java - 使用 USB 和 Java 检测电流