10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package java.util.function;
26
27 import java.util.Objects;
28
29 /**
30 * Determines if the {@code double} input value matches some criteria. This is
31 * the {@code double}-consuming primitive type specialization of
32 * {@link Predicate}.
33 *
34 * @see Predicate
35 * @since 1.8
36 */
37 @FunctionalInterface
38 public interface DoublePredicate {
39
40 /**
41 * Returns {@code true} if the input value matches some criteria.
42 *
43 * @param value the value to be tested
44 * @return {@code true} if the input value matches some criteria, otherwise
45 * {@code false}
46 */
47 boolean test(double value);
48
49 /**
50 * Returns a predicate which evaluates to {@code true} only if this
51 * predicate and the provided predicate both evaluate to {@code true}. If
52 * this predicate returns {@code false} then the remaining predicate is not
53 * evaluated.
54 *
55 * <p>Any exceptions thrown by either {@code test} method are relayed
56 * to the caller; if performing first operation throws an exception, the
57 * second operation will not be performed.
58 *
59 * @param p a predicate which will be logically-ANDed with this predicate
60 * @return a new predicate which returns {@code true} only if both
61 * predicates return {@code true}
62 * @throws NullPointerException if p is null
63 */
64 default DoublePredicate and(DoublePredicate p) {
65 Objects.requireNonNull(p);
66 return (value) -> test(value) && p.test(value);
67 }
68
69 /**
70 * Returns a predicate which negates the result of this predicate.
71 *
72 * @return a new predicate who's result is always the opposite of this
73 * predicate
74 */
75 default DoublePredicate negate() {
76 return (value) -> !test(value);
77 }
78
79 /**
80 * Returns a predicate which evaluates to {@code true} if either this
81 * predicate or the provided predicate evaluates to {@code true}. If this
82 * predicate returns {@code true} then the remaining predicate is not
83 * evaluated.
84 *
85 * <p>Any exceptions thrown by either {@code test} method are relayed
86 * to the caller; if performing first operation throws an exception, the
87 * second operation will not be performed.
88 *
89 * @param p a predicate which will be logically-ANDed with this predicate
90 * @return a new predicate which returns {@code true} if either predicate
91 * returns {@code true}
92 * @throws NullPointerException if p is null
93 */
94 default DoublePredicate or(DoublePredicate p) {
95 Objects.requireNonNull(p);
96 return (value) -> test(value) || p.test(value);
97 }
98 }
|
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package java.util.function;
26
27 import java.util.Objects;
28
29 /**
30 * Represents a predicate (boolean-valued function) of one {@code double}-valued
31 * argument. This is the {@code double}-consuming primitive type specialization
32 * of {@link Predicate}.
33 *
34 * <p>This is a <a href="package-summary.html">functional interface</a>
35 * whose functional method is {@link #test(double)}.
36 *
37 * @see Predicate
38 * @since 1.8
39 */
40 @FunctionalInterface
41 public interface DoublePredicate {
42
43 /**
44 * Evaluates this predicate on the given argument.
45 *
46 * @param value the input argument
47 * @return {@code true} if the input argument matches the predicate,
48 * otherwise {@code false}
49 */
50 boolean test(double value);
51
52 /**
53 * Returns a composed predicate that represents a short-circuiting logical
54 * AND of this predicate and another. When evaluating the composed
55 * predicate, if this predicate is {@code false}, then the {@code other}
56 * predicate is not evaluated.
57 *
58 * <p>Any exceptions thrown during evaluation of either predicate are relayed
59 * to the caller; if evaluation of this predicate throws an exception, the
60 * {@code other} predicate will not be evaluated.
61 *
62 * @param other a predicate that will be logically-ANDed with this
63 * predicate
64 * @return a composed predicate that represents the short-circuiting logical
65 * AND of this predicate and the {@code other} predicate
66 * @throws NullPointerException if other is null
67 */
68 default DoublePredicate and(DoublePredicate other) {
69 Objects.requireNonNull(other);
70 return (value) -> test(value) && other.test(value);
71 }
72
73 /**
74 * Returns a predicate that represents the logical negation of this
75 * predicate.
76 *
77 * @return a predicate that represents the logical negation of this
78 * predicate
79 */
80 default DoublePredicate negate() {
81 return (value) -> !test(value);
82 }
83
84 /**
85 * Returns a composed predicate that represents a short-circuiting logical
86 * OR of this predicate and another. When evaluating the composed
87 * predicate, if this predicate is {@code true}, then the {@code other}
88 * predicate is not evaluated.
89 *
90 * <p>Any exceptions thrown during evaluation of either predicate are relayed
91 * to the caller; if evaluation of this predicate throws an exception, the
92 * {@code other} predicate will not be evaluated.
93 *
94 * @param other a predicate that will be logically-ORed with this
95 * predicate
96 * @return a composed predicate that represents the short-circuiting logical
97 * OR of this predicate and the {@code other} predicate
98 * @throws NullPointerException if other is null
99 */
100 default DoublePredicate or(DoublePredicate other) {
101 Objects.requireNonNull(other);
102 return (value) -> test(value) || other.test(value);
103 }
104 }
|