首页 > 图灵资讯 > 技术篇>正文

如何用 Java 编写自定义比较器函数?

2024-09-29 20:11:20

如何用 java 编写自定义比较器函数?

1.了解java比较器的基本知识

在 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 编写自定义比较器函数?详情请关注图灵教育的其他相关文章!

上一篇 Java函数式接口的lambda表达式实现
下一篇 返回列表

文章素材均来源于网络,如有侵权,请联系管理员删除。