2 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
創(chuàng)建流時(shí),您不會(huì)直接修改其源。您需要收集數(shù)據(jù)。您的過濾器似乎按預(yù)期工作。我個(gè)人不建議使用具有副作用的過濾流(執(zhí)行“ > 15,然后在其他地方counter
設(shè)置”邏輯),但您可以使用另一個(gè)流操作來完成,例如(用于轉(zhuǎn)換,這在您的情況下不是必需的,但可以使用):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());

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
過濾器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)
過濾器提供的中間流有需要更新的對(duì)象,因此可以應(yīng)用 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));
另外,請(qǐng)考慮使用 LocalDate 而不是已棄用的 Date。
添加回答
舉報(bào)