1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.collections4.functors; 18 19 import java.io.Serializable; 20 21 import org.apache.commons.collections4.Equator; 22 import org.apache.commons.collections4.Predicate; 23 24 /** 25 * Predicate implementation that returns true if the input is the same object 26 * as the one stored in this predicate by equals. 27 * 28 * @since 3.0 29 */ 30 public final class EqualPredicate<T> implements Predicate<T>, Serializable { 31 32 /** Serial version UID */ 33 private static final long serialVersionUID = 5633766978029907089L; 34 35 /** 36 * Factory to create the predicate. 37 * 38 * @param <T> the type that the predicate queries 39 * @param object the object to compare to 40 * @return the predicate 41 */ 42 public static <T> Predicate<T> equalPredicate(final T object) { 43 if (object == null) { 44 return NullPredicate.nullPredicate(); 45 } 46 return new EqualPredicate<>(object); 47 } 48 49 /** 50 * Factory to create the identity predicate. 51 * 52 * @param <T> the type that the predicate queries 53 * @param object the object to compare to 54 * @param equator the equator to use for comparison 55 * @return the predicate 56 * @since 4.0 57 */ 58 public static <T> Predicate<T> equalPredicate(final T object, final Equator<T> equator) { 59 if (object == null) { 60 return NullPredicate.nullPredicate(); 61 } 62 return new EqualPredicate<>(object, equator); 63 } 64 65 /** The value to compare to */ 66 private final T iValue; 67 68 /** The equator to use for comparison */ 69 private final Equator<T> equator; 70 71 /** 72 * Constructor that performs no validation. 73 * Use {@code equalPredicate} if you want that. 74 * 75 * @param object the object to compare to 76 */ 77 public EqualPredicate(final T object) { 78 // do not use the DefaultEquator to keep backwards compatibility 79 // the DefaultEquator returns also true if the two object references are equal 80 this(object, null); 81 } 82 83 /** 84 * Constructor that performs no validation. 85 * Use {@code equalPredicate} if you want that. 86 * 87 * @param object the object to compare to 88 * @param equator the equator to use for comparison 89 * @since 4.0 90 */ 91 public EqualPredicate(final T object, final Equator<T> equator) { 92 iValue = object; 93 this.equator = equator; 94 } 95 96 /** 97 * Evaluates the predicate returning true if the input equals the stored value. 98 * 99 * @param object the input object 100 * @return true if input object equals stored value 101 */ 102 @Override 103 public boolean evaluate(final T object) { 104 if (equator != null) { 105 return equator.equate(iValue, object); 106 } 107 return iValue.equals(object); 108 } 109 110 /** 111 * Gets the value. 112 * 113 * @return the value 114 * @since 3.1 115 */ 116 public Object getValue() { 117 return iValue; 118 } 119 120 }