2013-10-14 111 views
0

如主題中所述,我已獲得地圖TreeMap<String, ArrayList<String>> map = new TreeMap<String, ArrayList<String>>();,我想要獲取值的集合,然後按照ArrayList的長度對其進行排序,並僅在控制檯上打印這些值其長度大於3.如何獲取TreeMap值的集合並對其進行排序

我做到了,它的工作原理但它很醜。我可以做得更好嗎?

我的解決辦法:

Object[] values = map.values().toArray(); 

     Arrays.sort(values, new Comparator<Object>() { 

      @Override 
      public int compare(Object o1, Object o2) { 
       ArrayList<String> a1 = (ArrayList<String>) o1; 
       ArrayList<String> a2 = (ArrayList<String>) o2; 
       return -(a1.size() - a2.size()); 
      } 

     }); 
     for (Object o : values) { 
      ArrayList<String> list = (ArrayList<String>) o; 
      if (list.size() >= 3) 
       System.out.println(list.size() + ": " + (ArrayList<String>) o); 
     } 
+2

如果您只想打印長度大於3的數組列表,那麼爲什麼要排序呢? –

+1

爲什麼'Object []'?你知道類型。它是'ArrayList '...... – Fildor

+0

我知道這個類型,當我投它它時,我得到一個異常......做對了。 – Yoda

回答

0

我猜羅希特耆那教的暗示是,排序數組,然後反正迭代它是相當昂貴的,如果排序的唯一目的是爲了跳過不符合項長度標準

如果被檢查的元素足夠長,可以打印或不打印,您也可以只迭代它並檢查每次迭代。

相關問題