diff options
author | Ilia Motornyi <elmot@vaadin.com> | 2018-06-04 10:25:17 +0300 |
---|---|---|
committer | Teemu Suo-Anttila <tsuoanttila@users.noreply.github.com> | 2018-06-04 10:25:17 +0300 |
commit | 080fcba26ad6571e191c816ae535449ab8f9d657 (patch) | |
tree | ef81e6f893bfa3818b61cbd2f19f7e4988fa7e04 /server | |
parent | b2a02c46362f70c86eaa88c63abd5282cc2ddb47 (diff) | |
download | vaadin-framework-080fcba26ad6571e191c816ae535449ab8f9d657.tar.gz vaadin-framework-080fcba26ad6571e191c816ae535449ab8f9d657.zip |
Implement serializable predicate helper methods (#10952)
Diffstat (limited to 'server')
-rw-r--r-- | server/src/main/java/com/vaadin/server/SerializablePredicate.java | 82 |
1 files changed, 81 insertions, 1 deletions
diff --git a/server/src/main/java/com/vaadin/server/SerializablePredicate.java b/server/src/main/java/com/vaadin/server/SerializablePredicate.java index 1bce65769d..495fdb2c9f 100644 --- a/server/src/main/java/com/vaadin/server/SerializablePredicate.java +++ b/server/src/main/java/com/vaadin/server/SerializablePredicate.java @@ -16,6 +16,7 @@ package com.vaadin.server; import java.io.Serializable; +import java.util.Objects; import java.util.function.Predicate; /** @@ -28,5 +29,84 @@ import java.util.function.Predicate; * */ public interface SerializablePredicate<T> extends Predicate<T>, Serializable { - // Only method inherited from Predicate + /** + * Returns a composed predicate that represents a short-circuiting logical + * AND of this predicate and another. When evaluating the composed + * predicate, if this predicate is {@code false}, then the {@code other} + * predicate is not evaluated. + * + * <p> + * Any exceptions thrown during evaluation of either predicate are relayed + * to the caller; if evaluation of this predicate throws an exception, the + * {@code other} predicate will not be evaluated. + * + * @param other + * a predicate that will be logically-ANDed with this predicate + * @return a composed predicate that represents the short-circuiting logical + * AND of this predicate and the {@code other} predicate + * @throws NullPointerException + * if other is null + * @since + */ + default SerializablePredicate<T> and( + SerializablePredicate<? super T> other) { + Objects.requireNonNull(other); + return t -> test(t) && other.test(t); + } + + /** + * Returns a predicate that represents the logical negation of this + * predicate. + * + * @return a predicate that represents the logical negation of this + * predicate + * @since + */ + default SerializablePredicate<T> negate() { + return t -> !test(t); + } + + /** + * Returns a composed predicate that represents a short-circuiting logical + * OR of this predicate and another. When evaluating the composed predicate, + * if this predicate is {@code true}, then the {@code other} predicate is + * not evaluated. + * + * <p> + * Any exceptions thrown during evaluation of either predicate are relayed + * to the caller; if evaluation of this predicate throws an exception, the + * {@code other} predicate will not be evaluated. + * + * @param other + * a predicate that will be logically-ORed with this predicate + * @return a composed predicate that represents the short-circuiting logical + * OR of this predicate and the {@code other} predicate + * @throws NullPointerException + * if other is null + * @since + */ + default SerializablePredicate<T> or( + SerializablePredicate<? super T> other) { + Objects.requireNonNull(other); + return t -> test(t) || other.test(t); + } + + /** + * Returns a predicate that tests if two arguments are equal according to + * {@link Objects#equals(Object, Object)}. + * + * @param <T> + * the type of arguments to the predicate + * @param targetRef + * the object reference with which to compare for equality, which + * may be {@code null} + * @return a predicate that tests if two arguments are equal according to + * {@link Objects#equals(Object, Object)} + * @since + */ + static <T> SerializablePredicate<T> isEqual(Serializable targetRef) { + return (null == targetRef) ? Objects::isNull + : object -> targetRef.equals(object); + } + } |