java中的比较器

时间:2020-02-23 14:34:45  来源:igfitidea点击:

在本教程中,我们将看到如何使用比较器在Java中排序对象列表。

比较器(Comparator):

如果要对类的对象列表进行排序,可以使用比较器接口。
我们不需要在类中执行比较器,其对象需要对其进行排序。
我们可以创建单独的类并实现如下的比较器接口。

例如:

package com.arpit.theitroad;
 
import java.util.Comparator;
 
public class EmployeeSortByIdComparator implements Comparator{
 
	@Override
	public int compare(Employee e1, Employee e2) {
		return e1.getEmpId()-e2.getEmpId();
	}
}

我们可以根据需要排序的不同属性使用不同的排序逻辑。

例如:假设我们想要按名称对员工列表进行排序,我们可以在OCDE下面使用。

Employee e1= new Employee(4, "John", 20);
		Employee e2= new Employee(3, "Martin", 40);
		Employee e3= new Employee(1, "Mary", 28);
		Employee e4= new Employee(2, "Andrew", 35);
		
		List<Employee> listofEmployees=new ArrayList<>();
		listofEmployees.add(e1);
		listofEmployees.add(e2);
		listofEmployees.add(e3);
		listofEmployees.add(e4);
		
		System.out.println("Before Sorting by name: ");
		for (Employee e:listofEmployees) {
			System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName());
		}
		
		Collections.sort(listofEmployees,new Comparator<Employee>() {
 
			@Override
			public int compare(Employee o1, Employee o2) {
				return o1.getName().compareTo(o2.getName());
			}
		});
		System.out.println("After Sorting by name: ");
		for (Employee e:listofEmployees) {
			System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName());
		}

比较器Java代码:

创建一个名为emploomee.java的类,该类将有empid,名称和年龄。

1.Employee.java.

package com.arpit.theitroad;
 
public class Employee {
	private int empId;
	private String name;
	private int age;
	public Employee(int empId, String name, int age) {
		super();
		this.empId = empId;
		this.name = name;
		this.age = age;
	}
	public int getEmpId() {
		return empId;
	}
	public void setEmpId(int empId) {
		this.empId = empId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

创建一个名为"employeoherortbyIdcomparator"的类。
此类将通过Empid对员工进行排序列表。
2.employeAortByIdComparator.java

package com.arpit.theitroad;
 
import java.util.Comparator;
 
public class EmployeeSortByIdComparator implements Comparator{
 
	@Override
	public int compare(Employee e1, Employee e2) {
		return e1.getEmpId()-e2.getEmpId();
	}
}

让我们创建主类,该类将有创建对象列表并根据Empid排序它。

  1. employeecomparatormain.java.
package com.arpit.theitroad;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class EmployeeComparatorMain {
 
	public static void main(String[] args) {
		Employee e1= new Employee(4, "John", 20);
		Employee e2= new Employee(3, "Martin", 40);
		Employee e3= new Employee(1, "Mary", 28);
		Employee e4= new Employee(2, "Andrew", 35);
		
		List<Employee> listofEmployees=new ArrayList<>>();
		listofEmployees.add(e1);
		listofEmployees.add(e2);
		listofEmployees.add(e3);
		listofEmployees.add(e4);
		
		System.out.println("Before Sorting by empId: ");
		for (Employee e:listofEmployees) {
			System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName());
		}
		
		Collections.sort(listofEmployees,new EmployeeSortByIdComparator());
		System.out.println("After Sorting by empId: ");
		for (Employee e:listofEmployees) {
			System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName());
		}
	}
}

输出:

Before Sorting by empId: 
Employee Id: 4|| name: John
Employee Id: 3|| name: Martin
Employee Id: 1|| name: Mary
Employee Id: 2|| name: Andrew
After Sorting by empId: 
Employee Id: 1|| name: Mary
Employee Id: 2|| name: Andrew
Employee Id: 3|| name: Martin
Employee Id: 4|| name: John

匿名比较器:

例如,比较器上的比较器的一个优势是创建匿名比较器:我们不需要为需要对其进行排序的对象来实现对类的类相对的接口。
让我们在榜样的帮助下了解更多信息:我们将使用匿名类按名称对员工列表进行排序。

ComparatorMain.java.

package com.arpit.theitroad;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
public class EmployeeComparatorMain {
 
	public static void main(String[] args) {
		Employee e1= new Employee(4, "John", 20);
		Employee e2= new Employee(3, "Martin", 40);
		Employee e3= new Employee(1, "Mary", 28);
		Employee e4= new Employee(2, "Andrew", 35);
		
		List<Employee> listofEmployees=new ArrayList<>>();
		listofEmployees.add(e1);
		listofEmployees.add(e2);
		listofEmployees.add(e3);
		listofEmployees.add(e4);
		
		System.out.println("Before Sorting by name: ");
		for (Employee e:listofEmployees) {
			System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName());
		}
		
		Collections.sort(listofEmployees,new Comparator<Employee>() {
 
			@Override
			public int compare(Employee o1, Employee o2) {
				return o1.getName().compareTo(o2.getName());
			}
		});
		System.out.println("After Sorting by name: ");
		for (Employee e:listofEmployees) {
			System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName());
		}
	}
}

输出:

Before Sorting by name: 
Employee Id: 4|| name: John
Employee Id: 3|| name: Martin
Employee Id: 1|| name: Mary
Employee Id: 2|| name: Andrew
After Sorting by name: 
Employee Id: 2|| name: Andrew
Employee Id: 4|| name: John
Employee Id: 3|| name: Martin
Employee Id: 1|| name: Mary

正如我们在这里看到的,我们使用匿名比较器按名称对员工列表进行排序。
我们在此没有创建比较器特定的程序。