我在列表中有一个以下过滤器。我需要居住在指定时间范围内的人员,其中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