JSONObject 降序
时间: 2025-04-21 10:43:06 浏览: 35
### 对 `JSONObject` 按值或键进行降序排序
#### 按键降序排序
为了按键对 `JSONObject` 进行降序排序,可以先将其转换为一个可迭代的对象列表,再利用 Java 的流操作来进行排序。
```java
import org.json.JSONObject;
import java.util.Map;
import java.util.stream.Collectors;
public class SortByKey {
public static void sortByKeyDescending(JSONObject jsonObject) {
Map<String, Object> sortedMap = jsonObject.toMap().entrySet()
.stream()
.sorted(Map.Entry.<String, Object>comparingByKey().reversed())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> e1,
LinkedHashMap::new));
System.out.println(sortedMap);
}
}
```
此代码片段展示了如何创建一个新的映射表,在这个过程中按照键名逆向排列条目[^1]。
#### 按值降序排序
当需要依据 JSON 对象中的值而不是键来排序时,则应该调整比较逻辑以基于值而非键:
```java
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
public class SortByValue {
private static final Comparator<JSONObject> VALUE_COMPARATOR =
(o1, o2) -> ((Comparable)o1.get("value")).compareTo(o2.get("value"));
@SuppressWarnings("unchecked")
public static List<JSONObject> sortJSONArrayByValue(JSONArray jsonArray){
return Arrays.asList(jsonArray.toList()).stream()
.filter(item->item instanceof JSONObject)
.map(item->(JSONObject)item)
.sorted(VALUE_COMPARATOR.reversed()) // reverse order for descending sorting
.collect(Collectors.toList());
}
public static void main(String[] args) throws Exception{
JSONArray array = new JSONArray("[{\"key\":\"a\",\"value\":3},{\"key\":\"b\",\"value\":7}]");
List<JSONObject> result = sortJSONArrayByValue(array);
result.forEach(System.out::println);
}
}
```
这段程序定义了一个自定义的比较器用于对比两个 `JSONObject` 中指定名称 `"value"` 下存储的实际数值大小,并以此为基础实现了整个数组元素间的降序排列[^2]。
需要注意的是,以上例子假定所有的目标字段都存在并且拥有相同的数据类型;如果有不同类型的属性参与排序,则需额外处理这些特殊情况,比如通过反射机制获取具体类型并调用相应的 getter 方法(如 `getString()` 或者 `getInt()`),从而确保不同类型间能够正确地相互比较[^3]。
阅读全文
相关推荐


















