0

これは私のハッシュマップです:

Map<String,String> unsortMap = new HashMap<String,String>()このマップには次のような値が含まれています

unsortMap.put("18/06/2012", "18/06/2012");
unsortMap.put("19/06/2012", "19/06/2012");
unsortMap.put("20/06/2012", "20/06/2012");
unsortMap.put("26/06/2012", "26/06/2012");
unsortMap.put("27/06/2012", "27/06/2012");
unsortMap.put("04/07/2012", "04/07/2012");
unsortMap.put("13/07/2012", "13/07/2012");
unsortMap.put("29/06/2012", "29/06/2012");

このマップを並べ替えるために使用するコードは次のとおりです。

package samples;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class SortMapExample{

   public static void main(String[] args) {

    System.out.println("Unsort Map......");
    Map<String,String> unsortMap = new HashMap<String,String>();

    unsortMap.put("18/06/2012", "18/06/2012");
    unsortMap.put("19/06/2012", "19/06/2012");
    unsortMap.put("20/06/2012", "20/06/2012");
    unsortMap.put("26/06/2012", "26/06/2012");
    unsortMap.put("27/06/2012", "27/06/2012");
    unsortMap.put("04/07/2012", "04/07/2012");
    unsortMap.put("13/07/2012", "13/07/2012");
    unsortMap.put("29/06/2012", "29/06/2012");

    Iterator iterator=unsortMap.entrySet().iterator();

        for (Map.Entry entry : unsortMap.entrySet()) {
            System.out.println("Key : " + entry.getKey() 
                + " Value : " + entry.getValue());
        }

        System.out.println("Sorted Map......");
        Map<String,String> sortedMap =  sortByComparator(unsortMap);

        for (Map.Entry entry : sortedMap.entrySet()) {
            System.out.println("Key : " + entry.getKey() 
                + " Value : " + entry.getValue());
        }
   }

   private static Map sortByComparator(Map unsortMap) {

        List list = new LinkedList(unsortMap.entrySet());

        //sort list based on comparator
        Collections.sort(list, new Comparator() {
             public int compare(Object o1, Object o2) {
               return ((Comparable) ((Map.Entry) (o1)).getValue())
               .compareTo(((Map.Entry) (o2)).getValue());
             }
    });

        //put sorted list into map again
    Map sortedMap = new LinkedHashMap();
    for (Iterator it = list.iterator(); it.hasNext();) {
         Map.Entry entry = (Map.Entry)it.next();
         sortedMap.put(entry.getKey(), entry.getValue());
    }
    return sortedMap;
   }    
}

私が得る結果はこれです:

Sorted Map......
Key : 04/07/2012 Value : 04/07/2012
Key : 13/07/2012 Value : 13/07/2012
Key : 18/06/2012 Value : 18/06/2012
Key : 19/06/2012 Value : 19/06/2012
Key : 20/06/2012 Value : 20/06/2012
Key : 26/06/2012 Value : 26/06/2012
Key : 27/06/2012 Value : 27/06/2012
Key : 29/06/2012 Value : 29/06/2012

結果を次のようにしたい:(マップも月に基づいてソートする必要があります)

18/06/2012
19/06/2012
20/06/2012
26/06/2012
27/06/2012
29/06/2012
04/07/2012
13/07/2012

これについてどうすればいいですか?

4

4 に答える 4

4

parse()StringtoのDate代わりに 2 つの日付インスタンスを比較します。String

に変換するには、この例を参照してください。日付インスタンスを取得すると、簡単に使用できるコンパレータが既に実装されていますStringDate

return dateInstance1.compare(dateInstance2)

あなたのコンパレータで

:これらの日付をデータベースから文字列として読み取っている場合は、これを参照してください

于 2012-06-18T10:29:26.553 に答える
4

HashMapは順不同です。TreeMapの代わりに使用する必要がありHashMapます。また、比較のために解析Stringする必要があります。Date

詳細: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/TreeMap.html

于 2012-06-18T10:30:16.920 に答える
3

文字列をソートしていて、文字列のデフォルトの動作は ASCII 順でソートすることです。

他の方法でキーを並べ替えたい場合は、キーを本当に必要な型 (この場合は日付) に変換する必要があります。

SimpleDateFormat を使用してキーを Date オブジェクトに変換し、それらを比較します。

于 2012-06-18T10:31:56.877 に答える
2

データを SortedMap、具体的にはTreeMapインスタンスに変換します。

Comparator を受け取るコンストラクターを使用し、その中で比較ロジックを実行します。

于 2012-06-18T10:37:30.693 に答える