在 java 中,comparator 界面提供了一种比较两个对象来确定它们的顺序的方法。当您想按照自定义顺序对列表或数组进行排序时,这尤其有用。
当对象的自然排序(由其排序) comparable 当定义无法满足您的需求时,您需要定制自己 comparator。例如,根据工资、姓名或年龄 employee 对象列表的排序可能需要不同的比较器。
2. 编写自定义比较器函数让我们逐步完成创建自定义比较器的过程。
2.1 例子:根据工资对员工名单进行排序考虑一个类 employee ,包含字段 name 、 age 和 salary。我们希望按 salary 升序对 employee 对象列表进行排序。
import java.util.comparator; class employee { private string name; private int age; private double salary; // constructor, getters, and setters public employee(string name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } public double getsalary() { return salary; } @override public string tostring() { return "employee{" + "name='" + name + ''' + ", age=" + age + ", salary=" + salary + '}'; } } class salarycomparator implements comparator<employee> { @override public int compare(employee e1, employee e2) { return double.compare(e1.getsalary(), e2.getsalary()); } } </employee>
在这个例子中,salarycomparator 类实现 comparator 根据员工的工资进行比较,接口并重写比较方法。
立即学习“Java免费学习笔记(深入);
2.2 演示:对员工名单进行排序现在,让我们创建一个员工列表,并使用我们的自定义比较器。对其进行排序
import java.util.arraylist; import java.util.collections; import java.util.list; public class main { public static void main(string[] args) { list<employee> employees = new arraylist(); employees.add(new employee("john", 28, 50000)); employees.add(new employee("anna", 32, 75000)); employees.add(new employee("mike", 25, 45000)); system.out.println("before sorting:"); employees.foreach(system.out::println); // sort employees by salary collections.sort(employees, new salarycomparator()); system.out.println(" after sorting by salary:"); employees.foreach(system.out::println); } } </employee>
2.3 演示结果
上述代码将产生以下输出:
before sorting: employee{name='john', age=28, salary=50000.0} employee{name='anna', age=32, salary=75000.0} employee{name='mike', age=25, salary=45000.0} after sorting by salary: employee{name='mike', age=25, salary=45000.0} employee{name='john', age=28, salary=50000.0} employee{name='anna', age=32, salary=75000.0}
由于自定义比较器,员工列表按工资升级排列。
3. 高级自定义比较器有时候,你可能需要更复杂的逻辑,或者想要按照多个字段进行排序。
3.1 示例:按多个标准排序:让我们修改比较器,先按工资排序,然后在平局时按姓名排序。
class salarythennamecomparator implements comparator<employee> { @override public int compare(employee e1, employee e2) { int salarycompare = double.compare(e1.getsalary(), e2.getsalary()); if (salarycompare == 0) { return e1.getname().compareto(e2.getname()); } return salarycompare; } } </employee>
3.2 演示:按工资和姓名排序:
使用 salarythennamecomparator ,您现在可以根据工资和姓名对员工进行排名:
Collections.sort(employees, new SalaryThenNameComparator());
4. 结论
用 java 编写自定义比较器函数可以让您定制集合的排序行为,以满足特定的需要。无论您是需要通过单个字段进行简单的比较,还是需要通过多个条件进行复杂的排序,comparator 它们都提供了灵活而强大的解决方案。
如果您有任何问题或需要进一步解释,请随时在下面发表评论!
阅读更多帖子:如何使用 java 编写自定义比较器函数?
以上就是如何使用 Java 编写自定义比较器函数?详情请关注图灵教育的其他相关文章!