2014-09-08 2 views
1

날짜가 키로 저장되고 배열 목록이 값인 해시 맵이 있습니다. 최근 날짜를 먼저 표시하고 이전 날짜를 마지막으로 표시하려면지도를 정렬하고 싶습니다.날짜 키가있는지도를 역순으로 정렬하는 방법은 무엇입니까?

예 : '01-09-2014', '02-09-2014 ','31-08-2014 ', '30-08-2014'와 같은 4 개의 날짜가 있습니다.

그래서 출력은 "2014년 2월 9일", "2014년 1월 9일", "31-08-2014", "30-08-2014는"

이 문제를 해결하기 위해 도와주세요이어야한다 .

감사합니다.

+0

안녕 환영과 함께보세요! 무례한 소리가 들릴 즈음에는 몇 가지 코드를 작성한 다음 시작해야하는 * 문제 *를 게시해야합니다. –

+0

[날짜를 기준으로 HashMap을 정렬하는 방법?] (http://stackoverflow.com/questions/) 8298290/how-to-sort-hashmap-based-on-date) – Raedwald

답변

1

TreeMap을 사용하고 적절한 것을 Comparator (예 : (Date a, Date b) -> -a.compare(b))으로 정의하십시오.

2

public static void main(String[] args) { 
     Map<Date, Integer> m = new HashMap<Date, Integer>(); 

     DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 

     try { 
      m.put(dateFormat.parse("31-05-2011").getTime(), 67); 
      m.put(dateFormat.parse("01-06-2011").getTime(), 89); 
      m.put(dateFormat.parse("10-06-2011").getTime(), 56); 
      m.put(dateFormat.parse("25-05-2011").getTime(), 34); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     Map<Date, Integer> m1 = new TreeMap(m, new Comparator<Date>() { 
      @Override 
      public int compareTo(Date a, Date b) { 
      return -a.compare(b); 
      } 
     }); 
     DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 

     for (Map.Entry<Date, Integer> entry : m1.entrySet()) { 
      System.out.println(df.format(entry.getKey())); 
     } 
    } 
+0

HashMap은 어떤 순서 정렬을 보장하지 않습니다 - 작동하지 않습니다 ... – assylias

+0

그가 m1에서 TreeMap을 사용하는 이유. 그러나 Comparator (날짜 순서는 역순이 아닌 자연 순서로)를 오버라이드해야합니다. – NoDataFound

+0

@NoDataFound이'new TreeMap (m)'은'Date'를 키로 사용하고'Date' 클래스는'compareTo' 메소드를 오버라이드합니다. –

1
static void sortMap() throws Exception{ 
    DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 

    Map<Date, Integer> map = new TreeMap<Date, Integer>(new Comparator<Date>() { 
     public int compare(Date date1, Date date2) { 
      return date2.compareTo(date1); 
     } 
    }); 

    map.put(dateFormat.parse("01-09-2014"), 1); 
    map.put(dateFormat.parse("02-09-2014"), 2); 
    map.put(dateFormat.parse("31-08-2014"), 3); 
    map.put(dateFormat.parse("30-08-2014"), 4); 
} 
관련 문제