记录:469
场景:使用java.lang.Comparable实现比较器,使用java.util.Collections排序,实现找出最大值。
版本:JDK 1.8,Spring Boot 2.6.3,fastjson-2.0.33。
1.一个JSON字符串,找出最大值
1.1JSON字符串
[
{
"testTime": "2023-06-29 03:23:12",
"testValue": 0.9687
},
{
"testTime": "2023-07-05 12:15:11",
"testValue": 0.5267
},
{
"testTime": "2023-03-27 08:03:16",
"testValue": 0.9812
},
{
"testTime": "2023-05-13 18:19:52",
"testValue": 0.8613
},
{
"testTime": "2023-11-20 22:19:05",
"testValue": 0.6582
}
]
1.2解析
把JSON字符串转换是JSONArray类型,把值取出转换为独立对象,再做比较。
2.使用java.lang.Comparable实现比较器
public class CheckResultDto implements Comparable {
private String testTime;
private BigDecimal testValue;
public CheckResultDto(String testTime, BigDecimal testValue) {
super();
this.testTime = testTime;
this.testValue = testValue;
}
@Override
public int compareTo(CheckResultDto o) {
int result = 0;
//按照结果值降序排序
result = -this.testValue.compareTo(o.testValue);
return result;
}
public String getTestTime() {
return testTime;
}
public void setTestTime(String testTime) {
this.testTime = testTime;
}
public BigDecimal getTestValue() {
return testValue;
}
public void setTestValue(BigDecimal testValue) {
this.testValue = testValue;
}
}
3.使用java.util.Collections排序取出最大值
3.1代码
public static void main(String[] args) {
//1.Json字符串转换为List
List list=JSONArray.parseArray(getResultData(),CheckResultDto.class);
//2.使用Collections排序List
Collections.sort(list);
//3.获取最大值
CheckResultDto maxResult = list.get(0);
//4.打印最大值
System.out.println(JSON.toJSONString(maxResult));
}
3.2解析
(1)使用com.alibaba.fastjson.JSONArray把JSON字符串转换为List
(2)使用java.util.Collections排序排序后,最大值就在List第一个位置。
4.测试结果
{"testTime":"2023-03-27 08:03:16","testValue":0.9812}
5.辅助方法
示例中getResultData()取出JSON字符串。
public static String getResultData() {
String result = "[\n" +
" {\n" +
" \"testTime\": \"2023-06-29 03:23:12\",\n" +
" \"testValue\": 0.9687\n" +
" },\n" +
" {\n" +
" \"testTime\": \"2023-07-05 12:15:11\",\n" +
" \"testValue\": 0.5267\n" +
" },\n" +
" {\n" +
" \"testTime\": \"2023-03-27 08:03:16\",\n" +
" \"testValue\": 0.9812\n" +
" },\n" +
" {\n" +
" \"testTime\": \"2023-05-13 18:19:52\",\n" +
" \"testValue\": 0.8613\n" +
" },\n" +
" {\n" +
" \"testTime\": \"2023-11-20 22:19:05\",\n" +
" \"testValue\": 0.6582\n" +
" }\n" +
"]";
return result;
}
以上,感谢。
2023年7月26日