2012-04-23 77 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

相关问题