diff options
author | Paul Duffin <paulduffin@google.com> | 2017-02-07 15:04:10 +0000 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2017-02-07 16:57:54 +0000 |
commit | 3e5fbca0c57742f28f5c7e6bda6c3500b9471b47 (patch) | |
tree | 5bee6ac83dc3cc0b8f9421a61b2108b994c587a9 /test-runner/src/com/android/internal/util/Predicates.java | |
parent | 97fca8c035c7daa9cb1058aa37f0d8fb3ec73f70 (diff) |
Replace com.android.internal.util.Predicate with java.util.function.Predicate
Bug: 35089332
Bug: 30188076
Test: make checkbuild
Merged-In: I0a5b4bf520fc39b59d8d790b01e9cff0d54e6d21
Change-Id: I58e4e35e7b7315033d893748f7c79e1ba6732f39
Diffstat (limited to 'test-runner/src/com/android/internal/util/Predicates.java')
-rw-r--r-- | test-runner/src/com/android/internal/util/Predicates.java | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/test-runner/src/com/android/internal/util/Predicates.java b/test-runner/src/com/android/internal/util/Predicates.java new file mode 100644 index 000000000000..30b8dc6b6ee2 --- /dev/null +++ b/test-runner/src/com/android/internal/util/Predicates.java @@ -0,0 +1,126 @@ +/* + * 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. + * @hide + */ +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); + } + } +} |