2012-04-23 15 views
0

以下はComparatorのコードですが、SortedMap.putAll()の後にSortedMapはソースマップと比較してマップエントリの数が少なくなります。Key-ArrayListによるMap <ArrayList、List <Entity>>のソートには日付が設定されます

誰でもお手伝いできますか?

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

これを実行する際に例外はありませんか? –

+0

コンパレータのロジックが何であれ、それは決して起こらないはずです。あなたはおそらく間違ったことを見ているでしょう。 –

+0

あなたがテストしているデータセットを与えることができますか? – harshit

答えて

0

SortedMapまたはSortedSetを使用している場合、Comparatorは、2つのオブジェクトが等しい場合にのみ0を返す必要があります。それはこの基準によって主要な平等を扱うからです。

が自然順序付けを参照してください:1、2つのキーaとbを追加した場合、例えば http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html

をように(a.equals(b)は& & a.compareTo(B)== 0!)明示的な コンパレータを使用しないソートセットでは、2番目の加算演算はfalseを返します( のソートセットは増加しません)。これは、aとbがソートセットの観点 と等価であるためです。

+0

ありがとう@ユージーン。作品は完璧です。 – blacks0ul

0

マップの例を表示することができれば助けになりますが、とにかく回答になるでしょう。

これはおそらく、マップ内にcompareメソッド(コンパレータ内)が0を返すエントリがあることです。これはキーが等しいことを意味します。それらが等しい場合、それは同じキーです...そして、あなたはマップ内にキーを重複させることはできません。

問題が表示されますか?

私は上の少しの例を出してあげる:私のコンパレータは、すべての3つのキーのみを比較する(同じであることを述べているので

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

関連する問題