Java 与嵌套对象的谓词链接
Java predicate chaining with nested object
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);
我正在尝试通过一种方式链接谓词,这是我想使用子对象的谓词之一。
这是假设情况,我试图让事情更容易理解。
- 将致电 is_father (
parent
)
- is_father 将检查
parent
是否不是 null
- and() has_son
- has_son 将调用 is_child (parent.getChild())
- is_child 将检查
child
是否不为 null
有问题HAS_SON,我知道语法不对,可能是不允许嵌套(parent.child)。有人可以确认吗?现在我正在使用的解决方法是
private static final Predicate<Parent> HAS_SON = parent -> parent.getChild() != null;
不要忘记 Predicate
是通过使用 FunctionalInterface
的 test
方法触发的。以下将起作用
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);
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);
我正在尝试通过一种方式链接谓词,这是我想使用子对象的谓词之一。
这是假设情况,我试图让事情更容易理解。
- 将致电 is_father (
parent
) - is_father 将检查
parent
是否不是null
- and() has_son
- has_son 将调用 is_child (parent.getChild())
- is_child 将检查
child
是否不为 null
有问题HAS_SON,我知道语法不对,可能是不允许嵌套(parent.child)。有人可以确认吗?现在我正在使用的解决方法是
private static final Predicate<Parent> HAS_SON = parent -> parent.getChild() != null;
不要忘记 Predicate
是通过使用 FunctionalInterface
的 test
方法触发的。以下将起作用
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);