com.vaadin.server.SerializablePredicate Maven / Gradle / Ivy
/*
* Copyright (C) 2000-2024 Vaadin Ltd
*
* This program is available under Vaadin Commercial License and Service Terms.
*
* See for the full
* license.
*/
package com.vaadin.server;
import java.io.Serializable;
import java.util.Objects;
import java.util.function.Predicate;
/**
* A {@link Predicate} that is also {@link Serializable}.
*
* @author Vaadin Ltd
* @since 8.0
* @param
* the type of the input to the predicate
*
*/
public interface SerializablePredicate extends Predicate, Serializable {
/**
* 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.
*
*
* 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 8.5
*/
default SerializablePredicate 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 8.5
*/
default SerializablePredicate 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.
*
*
* 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 8.5
*/
default SerializablePredicate 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
* 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 8.5
*/
static SerializablePredicate isEqual(Serializable targetRef) {
return (null == targetRef) ? Objects::isNull
: object -> targetRef.equals(object);
}
}