2017-05-23 95 views
-7
[{TIME21=0, TIME22=2, TIME23=0, TIME12=0, TIME13=1, LOAN_AMT=500, TIME10=0, TIME20=0, TIME11=1, TIME17=0, TIME9=2, TIME16=0, TIME15=0, TIME14=1, TIME5=0, REG_DT=20170517, TIME6=0, TIME19=0, TIME7=0, TIME18=1, TIME8=4, TIME1=0, TIME2=0, TIME3=0, TIME4=0, TIME0=0}, {TIME21=3, TIME22=2, TIME23=3, TIME12=6, TIME13=7, LOAN_AMT=1000, TIME10=8, TIME20=2, TIME11=6, TIME17=6, TIME9=7, TIME16=2, TIME15=7, TIME14=5, TIME5=0, REG_DT=20170517, TIME6=1, TIME19=1, TIME7=3, TIME18=1, TIME8=5, TIME1=0, TIME2=1, TIME3=0, TIME4=0, TIME0=3}] 

這是一個列表,表單是List>,我想排序讓它顯示像TIME1,TIME2 ......,我應該怎麼做,以及這樣,這類型TIME1是BigDecimal的,這是我的代碼,但它不是劑量工作我如何對它進行排序

for (Map<String, Object> dataMap : chartData) { 
      List<Object> objs = new ArrayList<Object>(); 
      for (final Map.Entry<String, Object> entry : dataMap.entrySet()) { 
       Collections.sort(chartData,new Comparator<Map<String, Object>>() { 
        @Override 
        public int compare(Map<String, Object> o1, Map<String, Object> o2) { 
         BigDecimal s1 = (BigDecimal) o1.get(entry.getKey()); 
         BigDecimal s2 = (BigDecimal) o2.get(entry.getKey()); 
         int result = s1.compareTo(s2); 
         if (result < 0) { 
          System.out.println("a < b"); 
          return 1; 
         }else { 
          System.out.println("a>b"); 
          return -1; 
         } 
        } 

       }); 
      } 
     } 
+2

「不起作用」不起作用問題描述。 – EJoshuaS

+1

你在排序什麼?你說你想要TIME1,TIME2,但是你開始使用'BigDecimal'?那麼LOAN_AMT和其他的東西呢?如果您正在嘗試對TIME1,TIME2進行排序,您還需要將其分開,否則您將有TIME1,TIME10,TIME2,TIME20,TIME3,... – KevinO

+0

LOAN_AMT可以忽略 – Aaron

回答

1

來者皆排序地圖,你必須換地圖的入口進入集合,支持訂購像LinkedList。這裏有一個例子:

public static <K, V extends Comparable<? super V>> Map<K, V> 
    sortByKey(Map<K, V> map) 
{ 
    List<Map.Entry<K, V>> list = 
     new LinkedList<>(map.entrySet()); 
    Collections.sort(list, new Comparator<Map.Entry<K, V>>() 
    { 
     @Override 
     public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) 
     { 
      return (o1.getKey()).compareTo(o2.getKey()); 
     } 
    }); 
} 

正如你看到List<Map.Entry<K, V>> list握着你的地圖的入口。並將排序的列表轉換爲排序的映射使用LinkedHashMap

Map<K, V> result = new LinkedHashMap<>(); 
for (Map.Entry<K, V> entry : list) 
{ 
    result.put(entry.getKey(), entry.getValue()); 
} 
return result; 
+0

如果您要創建'List'僅僅是爲了排序集合,我推薦'ArrayList',而不是'LinkedList'。一個'ArrayList'已經包含一個數組,所以該方法只是對數組進行排序。對於其他類型的列表,代碼必須將所有元素收集到數組中,對數組進行排序,然後將已排序的數組複製回列表元素。 – ajb

+0

這是不正確的。一個'TreeMap'自動按鍵排序 - 不需要換行。 –

+0

你能舉一些例子給你想法嗎?謝謝 – Aaron