java 各种集合排序锦集

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)
View Code


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());
}
View Code

 

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);
View Code

 

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());
        }
    }
}

 

posted @ 2020-03-18 09:59  R_Oasis  阅读(1000)  评论(0编辑  收藏  举报