用Java编写Comparator for pair <string,date =“”>

时间:2016-06-08 14:19:03

标签: java casting comparator

我有一个包含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:

  

类型安全:从ObjectPair<Integer,Date>

取消选中

对于演员,我以为我正在用Pair<String, Date>检查类型。 至于声明,Comparator mycomp = new Comparator(),我试着把new Comparator(Pair<String, Date>)我得到这个:

  • 比较器是原始类型。对泛型类型Comparator<T>的引用应该参数化
  • 令牌“&gt;”上的语法错误,此令牌后的表达式

如果我尝试输入对象名称 Comparator mycomp = new Comparator(Pair<String, Date> obj)

我收到了找不到Pair的各种错误,找不到String,也没有导入它们的选项。

那么我做错了什么?

2 个答案:

答案 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());