gpt4 book ai didi

java - 来自比较器的未处理异常类型 ParseException

转载 作者:行者123 更新时间:2023-12-01 07:47:10 27 4
gpt4 key购买 nike

我需要对代表日期字符串列表进行排序。

我尝试了以下代码:

try {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd");
Collections.sort(days,
(s1, s2) -> sdf.parse(s1).compareTo(sdf.parse(s2)));
} catch (ParseException e) {
e.printStackTrace();
}

但是在 Eclipse 中,我在 sdf.parse(s1) 处收到编译时错误:

Unhandled exception type ParseException

有什么解决办法吗?

我的输入列表是:

[2016-01-02, 2016-01-03, 2016-01-01]

最佳答案

SimpleDateFormat::parse method抛出 checked exception ,因此您必须在调用方法的位置捕获它 - 在本例中是在 lambda 表达式内。

另一个问题是大写的Y代表年份。 Check the javadoc : Yweek year field ,这并不总是与年份相同。您必须将其更改为小写y:

// use lowercase "y" for year
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Collections.sort(days, (s1, s2) -> {
try {
return sdf.parse(s1).compareTo(sdf.parse(s2));
} catch (ParseException e) {
// what to do when parse fails? just ignore and go on? throw exception?
}
return 0; // return something or throw exception?
});

但是此代码存在问题:如果发生 ParseException,则意味着 String 不包含预期格式的日期 (yyyy- MM-dd)。在这种情况下你应该做什么?忽略它并返回 0,如上所示(意味着 invalid string is "equal" to any date ?)。停止排序并抛出异常?

也许最好先尝试将字符串转换为日期(如果您发现无效字符串,您可以决定忽略或停止转换),然后当您确定所有元素都有效时日期,您对它们进行排序。

Java 日期/时间 API

由于您使用的是 lambda,您的 Java 版本 >= 8,所以为什么不使用 new date/time API

假设daysString的集合:

List<LocalDate> sortedDates = days.stream()
// parse to LocalDate
.map(LocalDate::parse)
// sort
.sorted()
// get list of LocalDate's
.collect(Collectors.toList());

在这种情况下,days 内任何无效的 String 都会使此代码抛出异常,并且不会完成排序。不同之处在于,此方法会引发 unchecked 异常,因此您无需像使用 SimpleDateFormat 那样在此处显式捕获它。

如果您希望对 days 列表进行排序,只需将 LocalDate 转换回 String 即可:

days = days.stream()
// parse to LocalDate
.map(LocalDate::parse)
// sort
.sorted()
// convert back to string
.map(LocalDate::toString)
// get list of String's
.collect(Collectors.toList());

关于java - 来自比较器的未处理异常类型 ParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49276465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com