22 * or visit www.oracle.com if you need additional information or have any |
22 * or visit www.oracle.com if you need additional information or have any |
23 * questions. |
23 * questions. |
24 */ |
24 */ |
25 package java.util.function; |
25 package java.util.function; |
26 |
26 |
|
27 import java.util.Objects; |
|
28 |
27 /** |
29 /** |
28 * Determines if the input object matches some criteria. |
30 * Determines if the input object matches some criteria. |
29 * |
31 * |
30 * @param <T> the type of input objects to {@code test} |
32 * @param <T> the type of argument to {@code test} |
31 * |
33 * |
32 * @since 1.8 |
34 * @since 1.8 |
33 */ |
35 */ |
34 @FunctionalInterface |
36 @FunctionalInterface |
35 public interface Predicate<T> { |
37 public interface Predicate<T> { |
40 * @param t the input object |
42 * @param t the input object |
41 * @return {@code true} if the input object matches some criteria, otherwise |
43 * @return {@code true} if the input object matches some criteria, otherwise |
42 * {@code false} |
44 * {@code false} |
43 */ |
45 */ |
44 public boolean test(T t); |
46 public boolean test(T t); |
|
47 |
|
48 /** |
|
49 * Returns a predicate which evaluates to {@code true} only if this |
|
50 * predicate and the provided predicate both evaluate to {@code true}. If |
|
51 * this predicate returns {@code false} then the remaining predicate is not |
|
52 * evaluated. |
|
53 * |
|
54 * @param p a predicate which will be logically-ANDed with this predicate. |
|
55 * @return a new predicate which returns {@code true} only if both |
|
56 * predicates return {@code true}. |
|
57 */ |
|
58 public default Predicate<T> and(Predicate<? super T> p) { |
|
59 Objects.requireNonNull(p); |
|
60 return (t) -> test(t) && p.test(t); |
|
61 } |
|
62 |
|
63 /** |
|
64 * Returns a predicate which negates the result of this predicate. |
|
65 * |
|
66 * @return a new predicate who's result is always the opposite of this |
|
67 * predicate. |
|
68 */ |
|
69 public default Predicate<T> negate() { |
|
70 return (t) -> !test(t); |
|
71 } |
|
72 |
|
73 /** |
|
74 * Returns a predicate which evaluates to {@code true} if either this |
|
75 * predicate or the provided predicate evaluates to {@code true}. If this |
|
76 * predicate returns {@code true} then the remaining predicate is not |
|
77 * evaluated. |
|
78 * |
|
79 * @param p a predicate which will be logically-ORed with this predicate. |
|
80 * @return a new predicate which returns {@code true} if either predicate |
|
81 * returns {@code true}. |
|
82 */ |
|
83 public default Predicate<T> or(Predicate<? super T> p) { |
|
84 Objects.requireNonNull(p); |
|
85 return (t) -> test(t) || p.test(t); |
|
86 } |
|
87 |
|
88 /** |
|
89 * Returns a predicate that evaluates to {@code true} if both or neither of |
|
90 * the component predicates evaluate to {@code true}. |
|
91 * |
|
92 * @param p a predicate which will be logically-XORed with this predicte. |
|
93 * @return a predicate that evaluates to {@code true} if both or neither of |
|
94 * the component predicates evaluate to {@code true}. |
|
95 */ |
|
96 public default Predicate<T> xor(Predicate<? super T> p) { |
|
97 Objects.requireNonNull(p); |
|
98 return (t) -> test(t) ^ p.test(t); |
|
99 } |
45 } |
100 } |