Datetime 日期流过滤器
我有一个自定义对象列表,其中有一个Datetime 日期流过滤器,datetime,java-8,java-stream,java-time,Datetime,Java 8,Java Stream,Java Time,我有一个自定义对象列表,其中有一个字符串字段来存储日期 我需要编写一个过滤器,根据以下条件获取自定义对象列表:如果自定义对象日期和当前日期之间的天数等于4,则返回列表中已满足的对象 我试图在filter中将自定义对象字符串date解析为ZonedDateTime。但是它期待着try/catch块。如何处理这个案件 代码: 您可以在lambdas中使用try/catch: list.stream().filter(stringdate -> { try {
字符串
字段来存储日期
我需要编写一个过滤器,根据以下条件获取自定义对象列表:如果自定义对象日期和当前日期之间的天数等于4,则返回列表中已满足的对象
我试图在filter中将自定义对象字符串date解析为ZonedDateTime
。但是它期待着try
/catch
块。如何处理这个案件
代码:
您可以在lambdas中使用try/catch:
list.stream().filter(stringdate -> {
try {
return ChronoUnit.DAYS.between(currDate,
ZonedDateTime.ofInstant(df.parse(stringdate).toInstant(),
ZoneId.of("UTC"))) == 4;
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}).collect(...);
如果出现异常,您将如何处理?当然,此代码中的
return false
会导致元素被过滤掉。您还可以使用另一种方法来进行解析和异常处理,您可以从lambda调用该方法。这对streams来说是一个缺点。您可以创建一个“处理”异常的助手方法。是df
aSimpleDateFormat
?如果您有Java 8的ZoneDateTime
可用,则无需混合使用旧的Java.util.Date
API,只需使用DateTimeFormatter
:不直接相关,但可以使用ZoneOffset.UTC
,而不是ZoneId.of(“UTC”)
,它们是等效的:“如果区域ID等于‘GMT’、‘UTC’或‘UT’,则结果是具有相同ID和与ZoneOffset.UTC等效的规则的区域ID。”“您似乎可以只使用LocalDate
/LocalDateTime
而不是分区的。或者只使用DateTimeFormatter
而不是混合使用两种不同的API。那么,你就不需要试抓拦网了…
list.stream().filter(stringdate -> {
try {
return ChronoUnit.DAYS.between(currDate,
ZonedDateTime.ofInstant(df.parse(stringdate).toInstant(),
ZoneId.of("UTC"))) == 4;
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}).collect(...);