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
a
SimpleDateFormat
?如果您有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(...);