/******************************************************************************* * Breakout Cave Survey Visualizer * * Copyright (C) 2014 James Edwards * * jedwards8 at fastmail dot fm * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *******************************************************************************/ package org.andork.func; import java.util.regex.Pattern; import org.andork.util.Java7; /** * A true/false function defined on some type that can be used for filtering or * other operations. Typically, a predicate function would always return the * same value for a given object. * * @author andy.edwards * * @param <E> */ public interface Predicate<E> { public static class Equals<E> implements Predicate<E> { private E value; public Equals(E value) { super(); this.value = value; } @Override public boolean eval(E e) { return Java7.Objects.equals(e, value); } @Override public String toString() { return getClass().getSimpleName() + "[" + value + "]"; } } public static class Regex implements Predicate<String> { private Pattern pattern; public Regex(Pattern pattern) { super(); this.pattern = pattern; } public Regex(String regex) { this(Pattern.compile(regex)); } @Override public boolean eval(String e) { return pattern.matcher(e).matches(); } @Override public String toString() { return getClass().getSimpleName() + "[" + pattern + "]"; } } public static class StartsWith implements Predicate<String> { private String prefix; public StartsWith(String prefix) { super(); this.prefix = prefix; } @Override public boolean eval(String e) { return e != null && e.startsWith(prefix); } @Override public String toString() { return getClass().getSimpleName() + "[" + prefix + "]"; } } public boolean eval(E e); }