You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Groovy中实现Java 8 Lambda功能,从日期列表提取最新日期

问题根因
  • 类型不匹配:parseDate方法返回值为LocalDate类型,但接收返回值的date1/date2/date3声明为String,存储这些值的List泛型又定义为旧版java.util.Date,三类完全不兼容,直接触发编译报错。
  • 运行时异常风险:parseDate传入空字符串时会返回null,直接加入集合参与比较会触发空指针;同时Stream.max()无有效元素时直接调用get()会抛出NoSuchElementException。
修正后兼容代码(支持Java Stream写法)
import java.time.LocalDate
import java.util.Objects

LocalDate date1 = parseDate("2020-09-12")
LocalDate date2 = parseDate("")
LocalDate date3 = parseDate("2019-01-12")

List<LocalDate> l = new ArrayList<>()
l.add(date1)
l.add(date2)
l.add(date3)

// 先过滤空值,再取最大值,无有效日期时返回null避免异常
LocalDate maxDate = l.stream()
        .filter(Objects::nonNull)
        .max(LocalDate::compareTo)
        .orElse(null)

println(maxDate)

private LocalDate parseDate(String date) {
    try {
        return LocalDate.parse(date)
    } catch (Exception e) {
        return null
    }
}
Groovy原生简化写法(更符合Groovy使用习惯)

Groovy集合自带常用操作方法,无需手动实现Stream逻辑:

import java.time.LocalDate

// 定义日期转换闭包
def parseDate = { String date ->
    try { return LocalDate.parse(date) } catch (Exception ignored) { return null }
}

// 批量转换日期+过滤空值+取最大值,一行完成核心逻辑
def maxDate = ["2020-09-12", "", "2019-01-12"].collect(parseDate).findAll().max()

println(maxDate)

内容的提问来源于stack exchange,提问作者Rishabh Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 06:36:11