1. 程式人生 > >對jsonArray陣列儲存的物件做自定義按多個值排序

對jsonArray陣列儲存的物件做自定義按多個值排序

 public void batchRepayment() throws IOException{

  String jsonString = "[{ \"orderId\": \"431\", \"installment\": \"9\" }, { \"orderId\": \"135\", \"installment\": \"9\" },{ \"orderId\": \"432\", \"installment\": \"9\" },{ \"orderId\": \"135\", \"installment\": \"8\" },{ \"orderId\": \"135\", \"installment\": \"2\" },{ \"orderId\": \"432\", \"installment\": \"5\" },{ \"orderId\": \"431\", \"installment\": \"3\" }]";


        JSONArray jsonArray = JSONArray.fromObject(jsonString);
        if(jsonArray != null){
           List<JSONObject> jsonList = new ArrayList<JSONObject>();
           for (int i = 0; i < jsonArray.size(); i++) {
                jsonList.add(jsonArray.getJSONObject(i));
           }
           //重寫排序方法,按照order by orderId,installment方式排序,確保同個訂單orderId優先還期數installment靠前的
           Collections.sort( jsonList, new Comparator<JSONObject>() {
               private static final String KEY_NAME = "orderId";
               private static final String KEY_NAME2 = "installment";

               @Override
               public int compare(JSONObject a, JSONObject b) {
                   String valA_1 = new String();
                   String valB_1 = new String();
                   String valA_2 = new String();
                   String valB_2 = new String();

                   try {
                       valA_1 =  a.getString(KEY_NAME);
                       valB_1 =  b.getString(KEY_NAME);
                       valA_2 =  a.getString(KEY_NAME2);
                       valB_2 =  b.getString(KEY_NAME2);
                   }catch (JSONException e) {
                       //do something
                   }
                   int flag = valA_1.compareTo(valB_1);
                   if(flag == 0){
                      return valA_2.compareTo(valB_2);
                   }else{
                      return flag;
                   }
               }

           });

}