2016-06-08 77 views
1

我有一個包含字符串列表和日期的對象在Java中的比較:寫作對<字符串,日期>

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)

我得到的各種錯誤該對未找到且未找到字符串,並且沒有導入它們的選項。

那麼我做錯了什麼?

+0

我明白什麼是原始類型(至少在一般情況下),但我不明白我在這裏沒有進行類型檢查。 – Tony

+3

當您使用'比較器'時,您正在使用'Comparator'比較儀' –

+0

請您在訂購前後給出一些數據示例。 – bilelovitch

回答

0

只要使用這個

Comparator<Pair<String, Date>> mycomp = new Comparator<Pair<String, Date>>(){ 

而且你將不必再投作爲compare方法將

public int compare(Pair<String, Date> o1, Pair<String, Date> o2) 
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. 
     } 
}; 

對貨幣可能在你的應用程序的許多地方都可以使用,所以你也可以把它作爲一個單獨的類來使用,並重用這個對象在別處。

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()); 
相關問題