私のリストには次のフィルタがあります。私は指定された期間に住んでいる人が必要です。両方のリストの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
PersonとTimeという2つのパラメータがあります。これは単一述語ではなく、むしろBiPredicateです。 – JiKra
はい、これら2つのパラメータのスコープは同じではありません。人をカプセル化する 'Predicate