为了账号安全,请及时绑定邮箱和手机立即绑定

如果过滤值为空,如何跳过流过滤器?

如果过滤值为空,如何跳过流过滤器?

饮歌长啸 2023-09-20 14:34:01
我有一个 Java 对象列表。在数据库中,有些对象有字段nextSyncDate,有些则没有。我想要做的是将过滤器放在java流上,但前提是该字段存在并且例如大于今天的日期。所以简化一下,我想获取nextSyncDate比今天更大的对象和没有此字段的对象(get()在此字段后获取 NullPointException )。我已经尝试过类似的事情,但它没有像我想要的那样工作..List<MyObjects> objects; objects.stream()     .filter(obj -> Objects.nonNull(obj.getNextSyncDate()) && obj.getNextSyncDate().before(new Date()))另一方面,所有对象都有 field counter。我想做的另外是nextSyncDate为每个大于 15 的对象进行设置(例如明天)。counter我之前尝试过.map()对象.filter(),但它也不起作用。
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

创建流时,您不会直接修改其源。您需要收集数据。您的过滤器似乎按预期工作。我个人不建议使用具有副作用的过滤流(执行“ > 15,然后在其他地方counter设置”逻辑),但您可以使用另一个流操作来完成,例如(用于转换,这在您的情况下不是必需的,但可以使用):nextSyncDatepeekmap

List<MyObjects> objects = /* omitted */;
List<MyObjects> filteredObjects = objects.stream()
    .peek(MyObjects::setNextSycDateWithSomeLogic())
    .filter(obj -> Objects.nonNull(obj.getNextSyncDate()) && obj.getNextSyncDate().before(new Date()))
    .collect(Collectors.toList());


查看完整回答
反对 回复 2023-09-20
?
萧十郎

TA贡献1815条经验 获得超12个赞

过滤器counter还可以包含以下要求:


    final Date TODAY = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());

    final int COUNTER_THRESHOLD = 15;

    objects.stream()

            .filter(obj -> Objects.nonNull(obj.getNextSyncDate())

                    && obj.getNextSyncDate().before(TODAY)

                    && obj.getCounter() > COUNTER_THRESHOLD)

过滤器提供的中间流有需要更新的对象,因此可以应用 forEach:


    final Date TODAY = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());

    final Date TOMORROW = Date.from(LocalDate.now().plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant());

    final int COUNTER_THRESHOLD = 15;

    objects.stream()

            .filter(obj -> Objects.nonNull(obj.getNextSyncDate())

                    && obj.getNextSyncDate().before(TODAY)

                    && obj.getCounter() > COUNTER_THRESHOLD)

            .forEach(obj -> obj.setNextSyncDate(TOMORROW));

另外,请考虑使用 LocalDate 而不是已弃用的 Date。


查看完整回答
反对 回复 2023-09-20
  • 2 回答
  • 0 关注
  • 62 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信