Java使用Collections查找List中最大值、最小值

在开发当中,有时候我们需要查找List中的最大值,最小值。虽然可以自己写代码遍历,但是有轮子可用的情况下,直接用轮子方便的多。

在Java中使用Collections查找List中最大值、最小值如下:

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(5);
        list.add(8);
        Integer max = Collections.max(list);
        Integer min = Collections.min(list);
        System.out.println("max:" + max);
        System.out.println("min:" + min);
    }

打印结果:

max:8
min:1

注意:

在使用上述方法时候,必须确认你的List里面没有元素为null,不然会出现空指针异常。

修改代码如下,list里面人为插入一个null:

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(5);
        list.add(8);
        // 这里插入一个null
        list.add(null);
        Integer max = Collections.max(list);
        Integer min = Collections.min(list);
        System.out.println("max:" + max);
        System.out.println("min:" + min);
    }

打印结果:

Exception in thread "main" java.lang.NullPointerException
    at java.util.Collections.max(Collections.java:673)
    at ztt.json.JsonTest.main(JsonTest.java:32)

可以看到,出现了空指针异常。

查看源码,我们可以看到,max方法里面有遍历操作,在拿到元素(next)后,并没有做任何的非null判断,所以,如果我们的List里面有null值存在,在执行到

next.compareTo(candidate) > 0

时,就会出现空指针异常。

 

 

 

 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
可以使用 Java 的 `Collections.max()` 和 `Collections.min()` 方法结合自定义的比较器 `Comparator` 来实现获取列表时间字段最大的值和最小的值。以下是示例代码: ```java import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.Comparator; import java.util.List; public class TimeUtil { public static LocalDateTime getMaxTime(List<String> timeList) { Comparator<LocalDateTime> comparator = Comparator.naturalOrder(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); List<LocalDateTime> localDateTimeList = timeList.stream() .map(timeStr -> LocalDateTime.parse(timeStr, formatter)) .toList(); return Collections.max(localDateTimeList, comparator); } public static LocalDateTime getMinTime(List<String> timeList) { Comparator<LocalDateTime> comparator = Comparator.naturalOrder(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); List<LocalDateTime> localDateTimeList = timeList.stream() .map(timeStr -> LocalDateTime.parse(timeStr, formatter)) .toList(); return Collections.min(localDateTimeList, comparator); } } ``` 其,`getMaxTime()` 方法和 `getMinTime()` 方法都接收一个 `List` 类型的时间字符串列表作为参数,返回该列表时间最大值最小值对应的 `LocalDateTime` 对象。该方法使用Java 8 的 `Stream` API 将时间字符串转化为 `LocalDateTime` 对象,并使用 `Collections.max()` 和 `Collections.min()` 方法结合 `Comparator` 来获取时间最大值最小值。在比较器使用了 `Comparator.naturalOrder()` 方法来获取自然顺序的比较器,也就是按照时间从小到大或从大到小的顺序进行比较。时间格式的转换使用Java 8 的日期时间类 `LocalDateTime` 和 `DateTimeFormatter` 进行处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值