gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:34:53 25 4
gpt4 key购买 nike

我有一个 Java 对象列表。在数据库中,有些对象有字段nextSyncDate,有些则没有。我想要做的是将过滤器放在java流上,但仅当此字段存在并且例如大于今天的日期。所以简化一下,我想获取 nextSyncDate 大于今天的对象以及没有此字段的对象(在此字段上的 get() 之后获取 NullPointException)。

我已经尝试过类似的方法,但它没有像我想要的那样工作..

List<MyObjects> objects;
objects.stream()
.filter(obj -> Objects.nonNull(obj.getNextSyncDate()) && obj.getNextSyncDate().before(new Date()))

另一方面,所有对象都有字段counter。我还想做的是为 counter 大于 15 的每个对象设置 nextSyncDate (例如明天)。我尝试 .map() 对象在 .filter() 之前,但它也不起作用。

最佳答案

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

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());

关于java - 如果过滤值为空,如何跳过流过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58200874/

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