2 回答

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