Package org.dru.clay.util.functional

Source Code of org.dru.clay.util.functional.Predicates

package org.dru.clay.util.functional;

import org.dru.clay.util.FileMatcherPredicate;

/**
* Predicates
* User: joakimd
* Date: 2013-07-22
* Time: 15:49
*/
public final class Predicates {
    private Predicates() {
    }

    public static <T> Predicate<T> alwaysTrue() {
        return ObjectPredicate.ALWAYS_TRUE.withNarrowedType();
    }

    public static <T> Predicate<T> alwaysFalse() {
        return ObjectPredicate.ALWAYS_FALSE.withNarrowedType();
    }

    public static <T> Predicate<T> notNull() {
        return ObjectPredicate.NOT_NULL.withNarrowedType();
    }

    public static <T> Predicate<T> isNull() {
        return ObjectPredicate.IS_NULL.withNarrowedType();
    }

    public static <T> Predicate<T> equalTo(final T value) {
        return new IsEqualPredicate<T>(value);
    }

    public static <T> Predicate<T> not(final Predicate<T> predicate) {
        return new NotPredicate<T>(predicate);
    }
   
    public static Predicate<String> pattern(String pattern) {
      return new FileMatcherPredicate(pattern);
    }
   
    public static <F, T> Predicate<F> composite(final Function<F, T> function, final Predicate<T> predicate) {
        return new Predicate<F>() {
            @Override
            public boolean apply(final F value) {
                return predicate.apply(function.apply(value));
            }
        };
    }

    private static enum ObjectPredicate implements Predicate<Object> {
        ALWAYS_TRUE {
            @Override
            public boolean apply(final Object value) {
                return true;
            }
        },
        ALWAYS_FALSE {
            @Override
            public boolean apply(final Object value) {
                return false;
            }
        },
        NOT_NULL {
            @Override
            public boolean apply(final Object value) {
                return value != null;
            }
        },
        IS_NULL {
            @Override
            public boolean apply(final Object value) {
                return value == null;
            }
        };

        @SuppressWarnings("unchecked")
        public <T> Predicate<T> withNarrowedType() {
            return (Predicate<T>) this;
        }
    }

    private static class IsEqualPredicate<T> implements Predicate<T> {
        private final T value;

        private IsEqualPredicate(final T value) {
            value.getClass();
            this.value = value;
        }

        @Override
        public boolean apply(final T value) {
            return this.value.equals(value);
        }
    }

    private static class NotPredicate<T> implements Predicate<T> {
        private final Predicate<T> predicate;

        private NotPredicate(final Predicate<T> predicate) {
            predicate.getClass();
            this.predicate = predicate;
        }

        @Override
        public boolean apply(final T value) {
            return !predicate.apply(value);
        }
    }
}
TOP

Related Classes of org.dru.clay.util.functional.Predicates

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.