我在列表中有一個以下過濾器。我需要居住在指定時間範圍內的人員,其中validTo在兩個列表中都是可選的。正如你所看到的,它有點複雜,因爲我需要通過將謂詞移動到一個變量來簡化其他過濾器。創建單獨的謂詞
people.stream()
.filter(person -> peopleTime.stream().anyMatch(time ->
(!person.getValidTo().isPresent() || time.getValidFrom().isBefore(person.getValidTo().get()) || time.getValidFrom().isEqual(person.getValidTo().get()))
&& (!time.getValidTo().isPresent() || time.getValidTo().get().isAfter(person.getValidFrom()) || time.getValidTo().get().isEqual(person.getValidFrom()))))
我試圖創造一些BiPredicate和使用它,但anyMatch預計單個預測。 Person類擴展了Time類。
請幫忙嗎?
你的問題很難理解,你想要做什麼?爲了簡化你的「Predicate
有兩個參數 - 人員和時間。這不是單一的Predicate,而是BiPredicate。 – JiKra
是的,但這兩個參數沒有相同的範圍。你可以完美地創建一個封裝一個人的'Predicate