All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dakusui.crest.core.Printable Maven / Gradle / Ivy

package com.github.dakusui.crest.core;

import java.util.Objects;
import java.util.function.Function;
import java.util.function.Predicate;

public enum Printable {
  ;

  public static  Function function(String s, Function function) {
    Objects.requireNonNull(s);
    Objects.requireNonNull(function);
    return new Function() {
      @Override
      public R apply(T t) {
        return function.apply(t);
      }

      public  Function compose(Function before) {
        Objects.requireNonNull(before);
        return new Function() {
          @Override
          public R apply(V v) {
            return function.apply(before.apply(v));
          }

          @Override
          public String toString() {
            return String.format("%s->%s", before, s);
          }
        };
      }

      public  Function andThen(Function after) {
        Objects.requireNonNull(after);
        return new Function() {
          @Override
          public V apply(T t) {
            return after.apply(function.apply(t));
          }

          @Override
          public String toString() {
            return String.format("%s->%s", s, after);
          }
        };
      }

      @Override
      public String toString() {
        return s;
      }
    };
  }

  public static  Predicate predicate(String s, Predicate predicate) {
    return new Predicate() {
      @Override
      public boolean test(T t) {
        try {
          return predicate.test(t);
        } catch (ClassCastException e) {
          throw e;
        }
      }

      @Override
      public Predicate and(Predicate other) {
        Objects.requireNonNull(other);
        return new Predicate() {
          @Override
          public boolean test(T t) {
            return predicate.test(t) && other.test(t);
          }

          @Override
          public String toString() {
            return String.format("(%s&&%s)", s, other);
          }
        };
      }

      @Override
      public Predicate negate() {
        return new Predicate() {
          @Override
          public boolean test(T t) {
            return !predicate.test(t);
          }

          @Override
          public String toString() {
            return String.format("!%s", s);
          }
        };
      }

      @Override
      public Predicate or(Predicate other) {
        Objects.requireNonNull(other);
        return new Predicate() {
          @Override
          public boolean test(T t) {
            return predicate.test(t) || other.test(t);
          }

          @Override
          public String toString() {
            return String.format("(%s||%s)", s, other);
          }
        };
      }

      @Override
      public String toString() {
        return s;
      }
    };
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy