1.在JSONObject中保留LinkedHashMap(存儲的是插入的順序)排序?

Map<String, String> stateMap = new LinkedHashMap<String, String>(); JSONObject json = new JSONObject(); /* //這樣存儲時,沒有LinkedHashMap的順序 json.putAll(stateMap); */ //這樣存儲時,會有LinkedHashMap的順序 與JSONObject不同,JSONArray是一個有序的值序列. 因此,如果要保留地圖的順序,可以使用兩個鍵構造json對象: >第一個鍵可以稱為數據,並將保存您的stateMap數據,如下所示: json.element('data', stateMap) >第二個鍵可以被稱為鍵,它將是一個JSONArray對象,它將保存地圖鍵的有序列表,如下所示: JSONArray array = new JSONArray(); array.addAll(stateMap.keySet()) json.put('keys', array)
2.LinkedHashMap排序

LinkedHashMap<String, Float> map = new LinkedHashMap<>(); //先轉成ArrayList集合 ArrayList<Entry<String, Float>> list = new ArrayList<Map.Entry<String, Float>>(map.entrySet()); //從小到大排序(從大到小將o1與o2交換即可) Collections.sort(list, new Comparator<Map.Entry<String, Float>>() { @Override public int compare(Entry<String, Float> o1, Entry<String, Float> o2) { return ((o1.getValue() - o2.getValue() == 0) ? 0: (o1.getValue() - o2.getValue() > 0) ? 1: -1); } }); //新建一個LinkedHashMap,把排序后的List放入 LinkedHashMap<String, Float> map2 = new LinkedHashMap<>(); for (Map.Entry<String, Float> entry : list) { map2.put(entry.getKey(), entry.getValue()); } //遍歷輸出 for (Map.Entry<String, Float> entry : map2.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); }
3.map排序,map轉json防止順序錯亂

public static void main(String[] args) { Map<String, String> mapsort = new TreeMap<String, String>( new Comparator<String>() { public int compare(String obj1, String obj2) { // 降序排序 return obj2.compareTo(obj1); } }); Map<String,String> map = new HashMap<String, String>(); map.put("2018-04", "123"); map.put("2018-01", "123"); map.put("2018-05", "123"); map.put("2018-02", "123"); map.put("2018-06", "123"); mapsort.putAll(map); for (String key : mapsort.keySet()) { System.out.println("Key = " + key); } } //map轉json mapsort=JSON.parseObject(mapsort.toString(),new TypeReference<TreeMap<String, String>>(){} ,Feature.OrderedField);
4.JsonObject數據排序(順序)問題
JsonObject內部是用Hashmap來存儲的,所以輸出是按key的排序來的,如果要讓JsonObject按固定順序(put的順序)排列,可以修改JsonObject的定義HashMap改為LinkedHashMap。
public JSONObject() {
this.map = new LinkedHashMap(); //new HashMap();
}
即定義JsonObject可以這樣:JSONObject jsonObj = new JSONObject(new LinkedHashMap());
5.map排序
5map排序(順序、倒序)
package com.actionsoft.apps.ram.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class javaTest { public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("d", 4); map.put("a", 1); map.put("c", 3); map.put("e", 5); map.put("b", 2); //排序前 System.out.println("before sort"); for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + "->" + entry.getValue()); } System.out.println(); //將map轉成list List<Map.Entry<String, Integer>> infos = new ArrayList<Map.Entry<String, Integer>>(map.entrySet()); //對list排序,實現新的比較器 Collections.sort(infos, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o1.getValue() - o2.getValue(); } }); //申明新的有序 map,根據放入的數序排序 Map<String, Integer> lhm = new LinkedHashMap<String, Integer>(); //遍歷比較過后的map,將結果放到LinkedHashMap for (Map.Entry<String, Integer> entry : infos) { lhm.put(entry.getKey(), entry.getValue()); } //遍歷LinkedHashMap,打印值 System.out.println("after sort"); for (Map.Entry<String, Integer> entry : lhm.entrySet()) { System.out.println(entry.getKey() + "->" + entry.getValue()); } } }