diff options
| author | Paul Duffin <paulduffin@google.com> | 2017-02-09 19:37:26 +0000 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2017-02-09 19:37:26 +0000 |
| commit | 8faed4502409786dffed956d26bd790f8ad81075 (patch) | |
| tree | c65af19924ca65478dabfd08577e052dcc0bb759 /core/java/com | |
| parent | 70fd2f7197319d8c822709d79eb52117b9347118 (diff) | |
| parent | c1a93884dce8339f13aadf8b4abeeb7c44626451 (diff) | |
Merge "Partial Revert "Replace com.android.internal.util.Predicate with java.util.function.Predicate"" am: 621ebe692f am: a2c92b0b88
am: c1a93884dc
Change-Id: Icce543cd86f83bff8c2e80bf7ef492d22c9cf2dc
Diffstat (limited to 'core/java/com')
| -rw-r--r-- | core/java/com/android/internal/util/Predicate.java | 32 | ||||
| -rw-r--r-- | core/java/com/android/internal/util/Predicates.java | 125 |
2 files changed, 157 insertions, 0 deletions
diff --git a/core/java/com/android/internal/util/Predicate.java b/core/java/com/android/internal/util/Predicate.java new file mode 100644 index 000000000000..bc6d6b31dd28 --- /dev/null +++ b/core/java/com/android/internal/util/Predicate.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +/** + * A Predicate can determine a true or false value for any input of its + * parameterized type. For example, a {@code RegexPredicate} might implement + * {@code Predicate<String>}, and return true for any String that matches its + * given regular expression. + * <p/> + * <p/> + * Implementors of Predicate which may cause side effects upon evaluation are + * strongly encouraged to state this fact clearly in their API documentation. + */ +public interface Predicate<T> { + + boolean apply(T t); +} diff --git a/core/java/com/android/internal/util/Predicates.java b/core/java/com/android/internal/util/Predicates.java new file mode 100644 index 000000000000..c006564f129a --- /dev/null +++ b/core/java/com/android/internal/util/Predicates.java @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +import java.util.Arrays; + +/** + * Predicates contains static methods for creating the standard set of + * {@code Predicate} objects. + */ +public class Predicates { + + private Predicates() { + } + + /** + * Returns a Predicate that evaluates to true iff each of its components + * evaluates to true. The components are evaluated in order, and evaluation + * will be "short-circuited" as soon as the answer is determined. + */ + public static <T> Predicate<T> and(Predicate<? super T>... components) { + return Predicates.<T>and(Arrays.asList(components)); + } + + /** + * Returns a Predicate that evaluates to true iff each of its components + * evaluates to true. The components are evaluated in order, and evaluation + * will be "short-circuited" as soon as the answer is determined. Does not + * defensively copy the iterable passed in, so future changes to it will alter + * the behavior of this Predicate. If components is empty, the returned + * Predicate will always evaluate to true. + */ + public static <T> Predicate<T> and(Iterable<? extends Predicate<? super T>> components) { + return new AndPredicate(components); + } + + /** + * Returns a Predicate that evaluates to true iff any one of its components + * evaluates to true. The components are evaluated in order, and evaluation + * will be "short-circuited" as soon as the answer is determined. + */ + public static <T> Predicate<T> or(Predicate<? super T>... components) { + return Predicates.<T>or(Arrays.asList(components)); + } + + /** + * Returns a Predicate that evaluates to true iff any one of its components + * evaluates to true. The components are evaluated in order, and evaluation + * will be "short-circuited" as soon as the answer is determined. Does not + * defensively copy the iterable passed in, so future changes to it will alter + * the behavior of this Predicate. If components is empty, the returned + * Predicate will always evaluate to false. + */ + public static <T> Predicate<T> or(Iterable<? extends Predicate<? super T>> components) { + return new OrPredicate(components); + } + + /** + * Returns a Predicate that evaluates to true iff the given Predicate + * evaluates to false. + */ + public static <T> Predicate<T> not(Predicate<? super T> predicate) { + return new NotPredicate<T>(predicate); + } + + private static class AndPredicate<T> implements Predicate<T> { + private final Iterable<? extends Predicate<? super T>> components; + + private AndPredicate(Iterable<? extends Predicate<? super T>> components) { + this.components = components; + } + + public boolean apply(T t) { + for (Predicate<? super T> predicate : components) { + if (!predicate.apply(t)) { + return false; + } + } + return true; + } + } + + private static class OrPredicate<T> implements Predicate<T> { + private final Iterable<? extends Predicate<? super T>> components; + + private OrPredicate(Iterable<? extends Predicate<? super T>> components) { + this.components = components; + } + + public boolean apply(T t) { + for (Predicate<? super T> predicate : components) { + if (predicate.apply(t)) { + return true; + } + } + return false; + } + } + + private static class NotPredicate<T> implements Predicate<T> { + private final Predicate<? super T> predicate; + + private NotPredicate(Predicate<? super T> predicate) { + this.predicate = predicate; + } + + public boolean apply(T t) { + return !predicate.apply(t); + } + } +} |
