亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果過濾值為空,如何跳過流過濾器?

如果過濾值為空,如何跳過流過濾器?

飲歌長嘯 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條經驗 獲得超13個贊

過濾器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 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號