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

com.github.tonivade.purefun.Function4 Maven / Gradle / Ivy

/*
 * Copyright (c) 2018-2019, Antonio Gabriel Muñoz Conejo 
 * Distributed under the terms of the MIT License
 */
package com.github.tonivade.purefun;

@FunctionalInterface
public interface Function4 {

  R apply(A a, B b, C c, D d);

  default Function1>>> curried() {
    return a -> b -> c -> d -> apply(a, b, c, d);
  }

  default Function1, R> tupled() {
    return tuple -> apply(tuple.get1(), tuple.get2(), tuple.get3(), tuple.get4());
  }

  default  Function4 andThen(Function1 after) {
    return (a, b, c, d) -> after.apply(apply(a, b, c, d));
  }

  default  Function1 compose(Function1 beforeT1, Function1 beforeT2,
      Function1 beforeT3, Function1 beforeT4) {
    return value -> apply(beforeT1.apply(value), beforeT2.apply(value), beforeT3.apply(value), beforeT4.apply(value));
  }

  default Function4 memoized() {
    return (a, b, c, d) -> new MemoizedFunction<>(tupled()).apply(Tuple.of(a, b, c, d));
  }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy