Сцепление предикатов Java с вложенным объектом - PullRequest
1 голос
/ 22 июня 2019
private static final Predicate<Parent> HAS_SON = parent -> IS_CHILD(parent.getChild);
private static final Predicate<Child> IS_CHILD = Objects::nonNull;
private static final Predicate<Parent> IS_PARENT = Objects::nonNull;
private static final Predicate<Parent> IS_FATHER = IS_PARENT.and(HAS_SON);

Я пытаюсь связать предикаты одним поворотом, и это один из предикатов, которые я хочу использовать дочерний объект.

Это гипотетическая ситуация, которую я пытался облегчить для понимания.

  1. Будет сделан вызов is_father (parent)
  2. is_father проверит, если parent не null
  3. и () has_son
  4. has_son вызовет is_child (parent.getChild ())
  5. is_child проверит, не равен ли child ноль

Существует проблема HAS_SON, я знаю, что синтаксис неправильный, и, возможно, вложение (parent.child) может быть запрещено. Может кто-нибудь, пожалуйста, подтвердите? Прямо сейчас работа вокруг я использую это

private static final Predicate<Parent> HAS_SON = parent -> parent.getChild() != null;

1 Ответ

2 голосов
/ 22 июня 2019

Не забывайте, что Predicate запускается с помощью метода test из FunctionalInterface. Следующее будет работать

private static final Predicate<Child> IS_CHILD = Objects::nonNull;
private static final Predicate<Parent> HAS_SON = parent -> IS_CHILD.test(parent.getChild);
private static final Predicate<Parent> IS_PARENT = Objects::nonNull;
private static final Predicate<Parent> IS_FATHER = IS_PARENT.and(HAS_SON);
...