我有一个包含String和date列表的对象:
List<Pair<String, Date>> res;
然后我写了一个比较器
Comparator mycomp = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if ((o1.getClass().equals(ImmutablePair.class))
&& (o2.getClass().equals(ImmutablePair.class))) {
Pair<Integer, Date> p1 = (Pair<Integer, Date>) o1;
Pair<Integer, Date> p2 = (Pair<Integer, Date>) o1;
return comPair(p1, p2);
}
throw new AssertionError("Unknown Types");
}
public int comPair(Pair<Integer, Date> p1, Pair<Integer, Date> p2) {
return p1.getValue().compareTo(p2.getValue());
}
};
这有效,但我收到了几个警告。
第一行:
比较器是原始类型。应该参考通用类型
Comparator<T>
的参考。
投射p1和p2:
类型安全:从
取消选中Object
到Pair<Integer,Date>
对于演员,我以为我正在用Pair<String, Date>
检查类型。
至于声明,Comparator mycomp = new Comparator()
,我试着把new Comparator(Pair<String, Date>)
我得到这个:
Comparator<T>
的引用应该参数化如果我尝试输入对象名称
Comparator mycomp = new Comparator(Pair<String, Date> obj)
我收到了找不到Pair的各种错误,找不到String,也没有导入它们的选项。
那么我做错了什么?
答案 0 :(得分:0)
请使用此
Comparator<Pair<String, Date>> mycomp = new Comparator<Pair<String, Date>>(){
您将不再需要施放,因为compare
方法将
public int compare(Pair<String, Date> o1, Pair<String, Date> o2)
答案 1 :(得分:0)
将比较器专用于配对
java.util.Comparator mycomp = new java.util.Comparator<Pair<Integer, Date>>() {
@Override
public int compare(Pair<Integer, Date> pair1, Pair<Integer, Date> pair2) {
// compare here.
}
};
Pair可以在你的应用程序的许多地方使用,所以你也可以把它作为一个单独的类来重复使用。
public class MyPairComparator implements Comparator<Integer,Date> {
public int compare(Pair<Integer, Date> pair1, Pair<Integer, Date> pair2) {
// compare here.
}
}
// To Use
Collections.sort( pairs, new MyPairComparator());