gpt4 book ai didi

java - 在java中使用单个Comparator接口(interface)对具有多个字段的员工对象进行排序

转载 作者:行者123 更新时间:2023-11-30 07:08:04 24 4
gpt4 key购买 nike

考虑以下场景:

假设有一个 Employee 类,其属性为:eID、eName、eAge、eAddress、eDeptName,并且可以根据需要在将来添加更多属性。

此 Employee 对象作为键添加到 HashMap 中,字符串作为值添加到 HashMap 中。

考虑主类中的以下代码:

     class Test
{
public static void main(String[] args)
{
Map<Employee,String> m = new HashMap<>();
//Adding object in to map
m.put(e1,"one");
m.put(e2,"two");
m.put(e3,"othree");
}
}

现在我需要使用比较器接口(interface)根据员工对象对 map 进行排序。

我的问题是:-

1) 对员工对象进行排序的最常用方法是什么:对每个字段使用单独的比较器或对所有字段使用单个比较器

2) 如何对所有字段使用单个比较器以及如何调用它?

提前致谢

最佳答案

1) what is the best common used way to sort the employee object : by using seperate comparator for each field or using the single comparator for all fields

没有最好的方法,只有你需要的方法。您可以为每个字段设置单独的比较器,以便您可以按特定字段对列表进行排序。对于列表的排序方式,您将有更多选择。

或者,当您需要将多个字段用作决胜局时,您可以在同一比较器中使用多个字段。但您必须决定哪个是主要排序标准,哪个是次要标准。

做出决定时,问问自己:

  • 关于设计的可重用性。将它们分组为 1 个比较器比将它们分开更有用吗?
  • 如果您将它们分组为 1 个比较器,再次使用它的可能性有多大?
  • 哪一种使用起来更灵活?
  • 哪一个更容易维护?

2) How to use the single comparator for all fields and how to invoke it ?

如果您想使用所有字段,请假设 4 个字段:nameagesalarygender (以我自己的字段为例)

您仅选择 1 个您有兴趣用作排序标准的字段。其他 3 个字段将用作决胜局。

假设您按名称排序。当出现 2 个相似的姓名时,您可以使用第二个字段作为决胜符,例如 age

如果有多名员工具有相同的姓名和年龄,您可以按照第三个标准(可能是薪水)对他们进行排序。如果所有 3 个字段都相似,则您可以根据第四个条件性别对它们进行排序。

//example:
class EmployeeComparator implements Comparator<Employee>{
@Override
public int compare(Employee e1, Employee e2){
int cmp = e1.getName().compareTo(e2.getName());
if(cmp == 0)
cmp = e1.getAge() - e2.getAge();
if(cmp == 0)
cmp = e1.getSalary() - e2.getSalary();
if(cmp == 0)
cmp = e1.getGender().compareTo(e2.getGender());
return cmp;
}
}

关于java - 在java中使用单个Comparator接口(interface)对具有多个字段的员工对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39732921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com