使用java.lang.Comparable实现比较器和使用java.util.Collections排序

记录: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日

你可能感兴趣的:(L02-Java基础,java,Comparable,Collections,比较器和排序,JSONArray)