我有一个列表元素。
每个 OrderType 项目都有一个整数字段“优先级”,用于设置列表重新分类的优先级(1、2 或 3)。
我想创建一个比较器,将列表从优先级 1 重新排序到优先级 3。我可以使用 Collections.sort 方法吗?
我看到了这个例子:
package com.javacodegeeks.example;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SimpleSortExample {
public static void main(String[] args) {
List list = new ArrayList();
for (int i=0;i<10;i++) {
list.add((int) (Math.random() * 100));
}
System.out.println("Initial List: "+list);
Collections.sort(list);
System.out.println("Sorted List: "+list);
}
}
有一些例子here .
我该怎么做?
我尝试过:
Collections.sort(list, new Comparator() {
@Override
public int compare(Integer i1, Integer i2) {
return (i2.intValue() > i1.intValue()) ? 1 : -1;
}
});
但我收到错误,我必须实现 not ovveride 方法compare(object, Object)...
像compare(Integer, Integer)一样,不是重写方法。
最佳答案
您必须使用正确的List<>
类型如 List<Integer>
,然后使用 Integer
应该没事。这是建议的选择。
或者,如果您坚持使用非类型化 List
,你应该这样做
@Override
public int compare(Object i1, Object i2) {
...
}
相反。第二种选择不如另一种:类型安全性较低,并且必须进行转换才能使用它。
<小时/>使用List<OrderType>
,你必须完全改变你的代码,但你不能这样做
for (int i=0;i<10;i++) {
list.add((int) (Math.random() * 100));
}
再长一点(当然)。
此外,比较器应该像这样使用
Collections.sort(l, new Comparator<OrderType>() {
@Override
public int compare(OrderType o1, OrderType o2) {
return Integer.compare(oT1.getPriority(), oT2.getPriority());
}
});
特别注意
Comparator<OrderType>
组成compare()
的部分有正确的参数类型Integer.compare()
调用这使得检查更加容易(其他示例无法比较相等性......)
关于java - 特定项目字段列表的比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581713/