【发布时间】:2017-07-28 14:41:07
【问题描述】:
我的列表中有以下过滤器。我需要生活在指定时间范围内的人,其中两个列表中的 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<Time>简化为单一方法?什么阻碍了你? -
有两个参数——Person和Time。它不是单谓词,而是双谓词。
-
是的,但这两个参数的范围不同。你可以完美地创建一个
Predicate<Time>封装一个人。 -
究竟如何封装?