java - 关于自定义比较器

标签 java collections

我试图开发一个应用程序,其中数组列表将按名字排序,如果两个人的名字相同,则将根据他们的工资进行进一步比较,为此必须有一个比较器已制作,请告知如何制作自定义比较器..下面是我现在的程序仪式,它只是现在进行比较工资仪式的基础..!

  package saxbean;

class Emp //implements Comparable
{
      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;
       }


      /* public int compareTo(Object o)
       {
          Emp e=(Emp)o;
          return this.name.compareTo(e.name);
           //return this.job.compareTo(e.job);
        //   return this.salary-e.salary;

        }*/
} 

我的比较器是...

import java.util.Comparator;

    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)是...

class EmpListDemo
{
      public static void main(String arg[])
      {
          List  list=new ArrayList ();
          list.add(new Emp("Ram","Trainer",34000));
          list.add(new Emp("Sachin","Programmer",24000));
          list.add(new Emp("Ram","Trainer",34000));
          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("Priyanka","Manager",54000));
          list.add(new Emp("Sachin","Team Leader",54000));
          System.out.println("There are "+list.size()+" elements in the list.");


          //original list
          System.out.println("Content of list are : ");
          ListIterator itr1=list.listIterator();
          while(itr1.hasNext())
          {
            Emp e=(Emp)itr1.next();  
            e.display();
          }           



          System.out.println("*****************");

          System.out.println("Sort Object according to Salary");
          Collections.sort(list,new SalaryComparator());
          System.out.println("Content of list are : ");
           itr1=list.listIterator();
           while(itr1.hasNext())
           {
             Emp e=(Emp)itr1.next();  
             e.display();
           }
          }
}

但请告知如何开发一个应用程序,其中数组列表将按名字排序,如果两个人的名字相同,则将根据他们的工资进行进一步比较..!!

最佳答案

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

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

相关文章:

java - "Count Complete Tree Nodes"- 如何优化解决方案?

java - 在java中将java映射转换为scala不可变映射

java - Java中从给定Collection(Group By)创建子集合的集合

java - Collection 仅添加,从未阅读

swift - 反向压缩一个集合

java - 使用 Java 通过 http 上传文件时获取上传速度百分比进度?

java -/usr/bin/ld : cannot find -ljvm:during compiling jni project

java - Java maven spring 框架的 Restful API 不工作

java - 文本在 fragment 内更改后,Android 调用一次函数

c# - 这样的集合是否存在(Dictionary 和 HashSet 的功能)?