2012-04-23 79 views
0

下面是比較器代碼,但是在SortedMap.putAll()之後,與源映射相比,SortedMap具有較少數量的映射條目。按鍵排序映射<ArrayList,List <Entity>> - ArrayList設置日期

任何人都可以請幫忙嗎?

Comparator<ArrayList> arrayListComparer = new Comparator<ArrayList>() { 
       @Override 
       public int compare(ArrayList arrA, ArrayList arrB) { 
        DateFormat formatter = new SimpleDateFormat("MMM-yyyy"); 
        Date dateA = new Date(); 
        Date dateB = new Date(); 
        try { 
         dateA = formatter.parse(arrA.get(0).toString()); 
         dateB = formatter.parse(arrB.get(0).toString()); 
        } catch (ParseException ex) { 
         Logger.getLogger(ValueComparator.class.getName()).log(Level.SEVERE, null, ex); 
        } 
        if (dateA.before(dateB)) { 
         return 0; 
        } else if (dateA.after(dateB)) { 
         return 1; 
        } else { 
         return -1; 
        } 
       } 
      }; 
SortedMap sorted_map = new TreeMap(arrayListComparer); 
sorted_map.putAll(map); 
+0

運行此操作時不會出現異常? – 2012-04-23 18:03:55

+0

無論您的比較器的邏輯如何,都不應該發生。你可能看錯了一個東西。 – 2012-04-23 18:04:34

+0

你可以給你正在測試的數據集嗎? – harshit 2012-04-23 18:05:29

回答

0

當您使用SortedMapSortedSet時,Comparator只有在兩個對象相等的情況下才會返回0。因爲它通過這個標準來對待關鍵的平等。

見自然順序:http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html

例如,如果加上兩個鍵a和b,使得至(a.equals(b)中& & a.compareTo(B)== 0!)一個不使用明確的 比較器的有序集合,第二個添加操作返回false(並且 排序後的集合的大小不增加),因爲a和b等於 排序集合的透視圖。

+0

謝謝@Eugene。完美的作品。 – blacks0ul 2012-04-23 18:18:02

0

如果您可以向我們展示您的地圖的示例,這將有所幫助,但無論如何我都會冒險回答。

這可能是由於您的地圖中有條目,您的compare方法(在您的比較器中)返回0,這意味着鍵是相等的。如果它們相同,那麼它是同一個鍵......並且您不能在Map中有重複的鍵。

你能看到問題嗎?

我把一個小例子:因爲我比較說,所有三個鍵是相同的(唯一比較

public static void main(String[] args) { 
    Map<Bla, String> map = new HashMap<Bla, String>(); 
    map.put(new Bla(1,1), "bla1"); 
    map.put(new Bla(1,2), "bla2"); 
    map.put(new Bla(1,3), "bla3"); 

    System.out.println(map.size()); 

    TreeMap<Bla, String> treeMap = new TreeMap<Bla,String>(new Comparator<Bla>() { 
     @Override 
     public int compare(Bla bla, Bla bla1) { 
      return new Integer(bla.a).compareTo(bla1.a); 
     } 
    }); 

    treeMap.putAll(map); 

    System.out.println(treeMap.size()); 

} 

private static class Bla{ 

    private Bla(int a, int b) { 
     this.a = a; 
     this.b = b; 
    } 

    public int a; 
    public int b; 
} 

這將輸出

的「一個值)。

+0

嗨,這只是平等的問題。 :)非常感謝你盡力幫助。我的壞,試圖通宵編碼:) – blacks0ul 2012-04-23 18:19:24

相關問題