import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.BinaryOperator;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
public class FunctionType
{
public Supplier<Number> noParamLambda()
{
return () -> 3;
}
public Supplier<Number> noParamLambda2()
{
return new Supplier<Number>()
{
public Number get()
{
return 3;
}
};
}
public Supplier<Number> noParamLambda3()
{
Supplier<Number> a = () -> 3;//不能写成Object a =
return a;
}
//**********************************************
public Function<String, String> oneParamLambda()
{
return a -> a +" post";
}
public Function<String, String> oneParamLambda2()
{
return new Function<String, String>()
{
public String apply(String a)
{
return a + " post";
}
};
}
public Function<String, String> oneParamLambda3()
{
Function<String, String> b = a -> a +" post";
return b;
}
public Predicate<String> oneParamRtBooleanLambda()
{
return x -> x != null && x.indexOf("hello") >= 0;
}
public <T> UnaryOperator<T> oneParamWithSameReturnType()
{
return a -> a;
}
//************************************************
public BiFunction<String, String, String> twoParamLambda()
{
return (a, b) -> a + b;
}
public BiFunction<String, String, String> twoParamLambda2()
{
return new BiFunction<String, String, String>()
{
public String apply(String a, String b)
{
return a + b;
}
};
}
public BiFunction<String, String, String> twoParamLambda3()
{
BiFunction<String, String, String> w = (a, b) -> a + b;
return w;
}
public <T> BinaryOperator<T> twoParamWithSameTypeAndReturnSameType()
{
return (a, b) -> a;
}
//*******************************************
public Consumer<String> noReturnLambda()
{
return a -> System.out.println(a);
}
public BiConsumer<String, String> noReturnLambda2()
{
return (a, b) -> System.out.println(a+" "+b);
}
//*******************************************
public <T,U,V> Function<U,V> partial2To1(BiFunction<T, U, V> bf, T t)
{
return u -> bf.apply(t, u);
}
public <U,V> Supplier<V> partial1To0(Function<U, V> bf, U u)
{
return () -> bf.apply(u);
}
//*******************************************
public <T,U,V> Function<T, Function<U,V>> curry(BiFunction<T,U,V> bf)
{
return t -> (u -> bf.apply(t,u));
}
}