package org.example;

import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;

public class FunctionExamples {

  public static void main(String[] args) {
    simpleFunction();
    chainFunction();
    biFunction();
    biFunctionWithFunction();
  }

  private static void biFunctionWithFunction() {
    BiFunction<Integer, Integer, Integer> biFunction = (x, y) -> x + y;
    Function<Integer, String> function = x -> "Hello".concat(String.valueOf(x));
    System.out.println("  biFunctionWithFunction :" + biFunction.andThen(function).apply(2, 3));
  }

  private static void biFunction() {
    BiFunction<Integer, Integer, List<Integer>> biFunction = (x, y) -> Arrays.asList(x + y);
    System.out.println(biFunction.apply(2, 3));
  }

  private static void chainFunction() {
    Function<String, Integer> function1 = String::length;
    Function<Integer, Integer> function2 = x -> x * 3;
    System.out.println(function1.andThen(function2).apply("Hello Test"));


  }

  private static void simpleFunction() {
    Function<String, Integer> function = String::length;
    System.out.println(function.apply("Test"));
  }

}