根据key值,list排序

本文介绍了一种使用Java实现的对JSON数组按指定键名进行排序的方法。通过将JSON数组转换为可排序的列表,并利用自定义比较器进行排序,最后重新构造排序后的JSON数组返回。该方法适用于需要对JSON数据进行预处理的场景。

public JSONArray getSortJson(JSONArray jsonArray, String keyName) {
        JSONArray sortedJsonArray = new JSONArray();
        List<JSONObject> jsonValues = new ArrayList<JSONObject>();
        for (int i = 0; i < jsonArray.size(); i++) {
            jsonValues.add(jsonArray.getJSONObject(i));
        }
        Collections.sort(jsonValues, new Comparator<JSONObject>() {
            private String KEYNAME = keyName;
            @Override
            public int compare(JSONObject a, JSONObject b) {
                String valA = new String();
                String valB = new String();
                valA = (String) a.get(KEYNAME);
                valB = (String) b.get(KEYNAME);
                return valA.compareTo(valB);
            }
        });
        for (int i = 0; i < jsonValues.size(); i++) {
            JSONObject jsonObject = jsonValues.get(i);
            sortedJsonArray.add(jsonObject);
        }
        return sortedJsonArray;
    }

 

在Java中,对 `Map` 根据键(Key)进行排序是常见的需求,尤其是在需要按照特定顺序处理键对的场景中。以下介绍几种实现方式,并结合示例代码进行说明。 ### 使用 `TreeMap` 实现自然排序 `TreeMap` 是基于红黑树实现的 `Map` 接口,它默认按照键的自然顺序进行排序。对于字符串类型的键,排序规则是字典顺序。例如: ```java Map<String, String> unSortMap = new HashMap<>(); unSortMap.put("123-234", "2"); unSortMap.put("2-123", "1"); unSortMap.put("2134-1234", "3"); Map<String, String> sortedMap = new TreeMap<>(unSortMap); System.out.println(sortedMap); // 输出:{123-234=2, 2-123=1, 2134-1234=3} ``` 上述代码中,`TreeMap` 自动按照字符串的字典顺序对键进行排序[^1]。 ### 使用 `Stream API` 实现排序 Java 8 引入了 `Stream API`,可以通过流操作对 `Map` 的键对进行排序。例如: ```java Map<String, String> sortedMap = unSortMap.entrySet() .stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new )); System.out.println(sortedMap); // 输出:{123-234=2, 2-123=1, 2134-1234=3} ``` 此方法通过 `Map.Entry.comparingByKey()` 对键进行排序,并使用 `LinkedHashMap` 保持排序后的顺序[^2]。 ### 使用 `ArrayList` 和 `Collections.sort` 实现排序 可以通过提取键集合,对键进行排序,并按照排序后的键重新构建结果。例如: ```java StringBuilder stringBuilder = new StringBuilder(); ArrayList<String> keyList = new ArrayList<>(unSortMap.keySet()); Collections.sort(keyList); for (int i = 0; i < keyList.size(); i++) { String key = keyList.get(i); if (i == keyList.size() - 1) { stringBuilder.append(key).append("=").append(unSortMap.getOrDefault(key, "")); } else { stringBuilder.append(key).append("=").append(unSortMap.getOrDefault(key, "")).append("&"); } } System.out.println(stringBuilder.toString()); // 输出:123-234=2&2-123=1&2134-1234=3 ``` 此方法通过 `Collections.sort()` 对键列表进行排序,并按照排序后的顺序拼接字符串[^2]。 ### 自定义排序逻辑 如果需要更复杂的排序规则,可以自定义比较器。例如,基于键的特定部分进行排序: ```java class CustomKeyComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { String[] parts1 = o1.split("-"); String[] parts2 = o2.split("-"); return Integer.compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0])); } } Map<String, String> sortedMap = new TreeMap<>(new CustomKeyComparator()); sortedMap.putAll(unSortMap); System.out.println(sortedMap); // 输出:{2-123=1, 123-234=2, 2134-1234=3} ``` 此方法通过自定义比较器对键的前缀部分进行排序[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值