我有这门课:
public class Test {
private int priority;
private String desciption;
...
}
我有这个数组列表:
Priority: 1, Description: C2
Priority: 2, Description: C1
Priority: 3, Description: C1
Priority: 4, Description: C2
我想要这个结果:
Priority: 1, Description: C2
Priority: 4, Description: C2
Priority: 2, Description: C1
Priority: 3, Description: C1
我如何使用比较器来做到这一点? 谢谢!
编辑:
我回答你所有的问题:
@retro:不。描述是一个没有特定格式的字符串。它也可以为空。
@tobias_k:首先按描述“分组”,然后按优先级排序。优先级总是不相等。
@user270349:
这是我的尝试:
int result = 0;
if (o1.getPriority() < o2.getPriority()) result = -1;
else if (o1.getPriority() > o2.getPriority()) result = 1
result *= o1.getDescription().compareTo(o2.getDescription());
return result;
编辑2:
另一个输入/输出示例:
我有这个数组列表:
Priority: 1, Description: C2
Priority: 2, Description: C3
Priority: 3, Description: C1
Priority: 4, Description: C2
我想要这个结果:
Priority: 1, Description: C2
Priority: 4, Description: C2
Priority: 2, Description: C3
Priority: 3, Description: C1
这是我的解决方案:
List<Test> testList = new ArrayList<>();
testList.add(new Test(4, "C2"));
testList.add(new Test(2, "C3"));
testList.add(new Test(3, "C1"));
testList.add(new Test(1, "C2"));
Comparator<Test> comparator = new Comparator<Test>() {
@Override
public int compare(Test o1, Test o2) {
int res = o1.getDescription().compareTo(o2.getDescription());
if (res == 0)
return o1.getPriority() < o2.getPriority() ? -1 : 1;
else
return res;
}
};
Collections.sort(testList, comparator);
List<String> valoriInseriti = new ArrayList<>();
List<Test> grouping = new ArrayList<>();
for (Test t : testList) {
if (!valoriInseriti.contains(t.getDescription())) {
valoriInseriti.add(t.getDescription());
grouping.add(t);
}
}
comparator = new Comparator<Test>() {
@Override
public int compare(Test o1, Test o2) {
return o1.getPriority() < o2.getPriority() ? -1 : 1;
}
};
Collections.sort(grouping, comparator);
Collections.sort(testList, comparator);
List<Test> output = new ArrayList<>();
for (Test t1 : grouping) {
for (Test t2 : testList) {
if (t2.getDescription().equals(t1.getDescription())) {
output.add(t2);
}
}
}
System.out.println("==============================");
for (Test t : output)
System.out.println(t);
最佳答案
测试实现 Comparator
并重写 compare()
方法
public class Test implements Comparator<Test>{
private int priority;
private String desciption;
@Override
public int compare(Test o1, Test o2) {
// your code here
}
}
关于java - 如何创建这个java比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20399660/