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 /** The value to compare to */ 36 private final T iValue; 37 38 /** The equator to use for comparison */ 39 private final Equator<T> equator; 40 41 /** 42 * Factory to create the predicate. 43 * 44 * @param <T> the type that the predicate queries 45 * @param object the object to compare to 46 * @return the predicate 47 */ 48 public static <T> Predicate<T> equalPredicate(final T object) { 49 if (object == null) { 50 return NullPredicate.nullPredicate(); 51 } 52 return new EqualPredicate<>(object); 53 } 54 55 /** 56 * Factory to create the identity predicate. 57 * 58 * @param <T> the type that the predicate queries 59 * @param object the object to compare to 60 * @param equator the equator to use for comparison 61 * @return the predicate 62 * @since 4.0 63 */ 64 public static <T> Predicate<T> equalPredicate(final T object, final Equator<T> equator) { 65 if (object == null) { 66 return NullPredicate.nullPredicate(); 67 } 68 return new EqualPredicate<>(object, equator); 69 } 70 71 /** 72 * Constructor that performs no validation. 73 * Use <code>equalPredicate</code> 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</code> 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 super(); 93 iValue = object; 94 this.equator = equator; 95 } 96 97 /** 98 * Evaluates the predicate returning true if the input equals the stored value. 99 * 100 * @param object the input object 101 * @return true if input object equals stored value 102 */ 103 @Override 104 public boolean evaluate(final T object) { 105 if (equator != null) { 106 return equator.equate(iValue, object); 107 } 108 return iValue.equals(object); 109 } 110 111 /** 112 * Gets the value. 113 * 114 * @return the value 115 * @since 3.1 116 */ 117 public Object getValue() { 118 return iValue; 119 } 120 121 }