我需要实现比较器,以便根据特定条件对<code>Employee<code>对象进行排序。
class Employee
{
int employeeId;
String employeeName;
}
所以我手里已经有一个排序的List列表,我修改排序顺序如下
1 艾伦边界
2 贝蒂·爱德华兹
3 哈德逊岩石
4 昆汀·塔伦蒂诺
5伍迪·艾伦
3 哈德逊岩石
1 艾伦边界
2 贝蒂·爱德华兹
4 昆汀·塔伦蒂诺
5伍迪·艾伦
对于这种情况,只需制定一个特殊条件,在每个方向进行测试:
Comparator<Employee> c = new Comparator<Employee>() {
public int compare(Employee a, Employer b) {
if (a.getName().equals("Rock Hudson"))
return -1;
if (b.getName().equals("Rock Hudson"))
return 1;
return a.getName().compareTo(b.getName());
}
}
public class MyEmployeeComparator implements Comparator<Employee> {
private final String alwaysTopEmployee;
public MyEmployeeComparator(final String alwaysTopEmployee) {
this.alwaysTopEmployee = alwaysTopEmployee;
}
@Override
public int compare(Employee o1, Employee o2) {
if (o2.getName().equals(alwaysTopEmployee) && o1.getName().equals(alwaysTopEmployee))
return 0;
if (o1.getName().equals(alwaysTopEmployee))
return -1;
if (o2.getName().equals(alwaysTopEmployee))
return 1;
return o1.getName().compareTo(o2.getName());
}
}
并呼叫:
Collections.sort(stuff, new MyEmployeeComparator("Rock Hudson"));
你可以这样做
public static class Employee {
// a constructor
public Employee(int id, String name) {
this.employeeId = id;
this.employeeName = name;
}
// should be private and use getters and setters.
int employeeId;
String employeeName;
// A special Comparator
public static Comparator<Employee> rockHudsonComparator = new Comparator<Employee>() {
@Override
public int compare(Employee a, Employee b) {
if (a.employeeName.equals("Rock Hudson")) {
if (b.employeeName.equals("Rock Hudson")) {
return 0;
}
return -1;
} else if (b.employeeName.equals("Rock Hudson")) {
return 1;
}
return a.employeeName
.compareTo(b.employeeName);
}
};
public String toString() {
return "" + employeeId + " " + employeeName;
}
}
public static void main(String[] args) {
java.util.List<Employee> al = new java.util.ArrayList<Employee>();
al.add(new Employee(1, "Alan Border"));
al.add(new Employee(2, "Betty Edwards"));
al.add(new Employee(3, "Rock Hudson"));
al.add(new Employee(4, "Quentin Tarantino"));
al.add(new Employee(5, "Woody Allen"));
al.add(new Employee(6, "Rock Hudson")); // check the sort is stable.
System.out.println("Before sort");
System.out.println(al);
java.util.Collections.sort(al,
Employee.rockHudsonComparator);
System.out.println("After sort");
System.out.println(al);
}
哪个输出
[1 Alan Border, 2 Betty Edwards, 3 Rock Hudson, 4 Quentin Tarantino, 5 Woody Allen, 6 Rock Hudson]
[3 Rock Hudson, 6 Rock Hudson, 1 Alan Border, 2 Betty Edwards, 4 Quentin Tarantino, 5 Woody Allen]
我在理解和使用比较器方面有一个问题,有人问我以下问题: 我在一个单独的Employee类中使用compareTo比较器接口来调用比较器对象的重载使用。 任何帮助,建议,代码行将非常感谢!!
问题内容: 我们有一些代码根据其坐标之间的距离对地址列表进行排序。这是通过使用自定义比较器的collections.sort完成的。 但是,列表中有时不包含地址,这会导致NullPointerException。解决这个问题的最初想法是让比较器返回至少0个坐标为零的地址的距离。我担心这可能导致列表中“有效”元素的顺序损坏。 因此是否可以在比较器中为空数据返回“ 0”值,还是有一种更干净的方法来解决
我正在尝试编写一个使用最小优先级队列的算法,所以我在谷歌上四处查看并找到了PriorityQueue。不过,似乎为了使用它,我需要告诉它我希望它如何排列优先级,并且这样做的方法是使用比较器(我想比较我的“Node1”对象的特定数据字段)。更多的谷歌搜索提出了创建一个新的比较器的想法,它实现了比较器但覆盖了比较方法。我正在尝试的是这样(以及它的其他变体): 编译器有几个理由提出抗议,其中之一是我没有
我试着选一个段落,通过打印出前三个单词来找到它的“意义”。去掉所有语法单词和空白后,我使用Hashmap计算每个单词的出现次数。然后,由于我不知道更好的方法,我只是创建了自己的小自定义对象来存储单词、键和出现次数、值,就像Hashmap一样,但我的老师建议实现Comparable,但我遇到了一个问题。我有两个问题,一个在我“修复”另一个时出现。问题在于Pair类中的compareTo函数和另一个类
问题:我试图检查我是否可以使用2个或更多标准对列表(数据类型对象的ArrayList)进行排序。请注意,我知道使用比较器和比较功能。我希望检查是否有方法使用2个或更多标准进行排序,而不必使用我可以轻松使用比较器功能的自定义数据类型。对于1个标准排序,以下代码有效。 在这种情况下,如果我执行以下操作,IntelliJ IDE会立即给出一个错误,表示o.get(3)的“无法解析方法”get(int)”
嗨,我是贾维斯的新手。 我有一个实体,我正在为它实现一个自定义比较器,以便使用Javers进行比较。 我的实体:- 包装com.devyansh.entity; 进口java.util.清单; 导入组织。贾维斯。果心元模型。注释。实体 下面我注册了新的比较器:- 我的比较器实现:- 问题领域:- 每当我尝试使用以下行进行比较时:- Diff Diff=标枪。比较(new Ent(“aaa”,new