当一个定义的接口只有一个未实现方法时,可以使用lambda表达式来实现此接口。
//新建一个接口
interface Test{
public void Test1();
}
public static void main(String[] args) {
Test test = new Test() {
@Override
public void Test1() {
System.out.println("不使用函数式编程的写法");
}
};
test.Test1();
}
结果为:不使用函数式编程的写法
当使用函数式编程可以简化上述写法。
public static void main(String[] args) {
Test test1 = new Test() {
@Override
public void Test1() {
System.out.println("不使用函数式编程的写法");
}
};
test1.Test1();
Test test2 = () -> System.out.println("使用函数式编程的写法");
}
}
打印结果:不使用函数式编程的写法
使用函数式编程的写法
Function函数
Function<T,R> 传入的类型是T,返回的类型是R。执行apply方法来执行lambda函数。
还有compose和addThen方法,两个方法的传入参数都是Fuction函数。
public static void main(String[] args) {
//R apply(T t) 传入类型为T 返回类型为R
Function <String,String> function1 = a -> a+"fuction1";
System.out.println(function1.apply("test"));
//compose(Function<? super V,? EXTENDS T> before) 接受一个function函数作为传入参数
Function<String,String> function2 = b -> b+"fuction2";
String strFuction = function2.compose(function1).apply("test");
//此处apply传入的参数为fuction1要求的integer类型。并且将fuciton1产生的结过放入fuction2的参数中调用apply方法。
System.out.println(strFuction);
System.out.println(function2.andThen(function1).apply("test"));
//addandThen方法先执行fuction2方法,然后将fuction2方法的返回值传入fuction1再执行。和compose方法执行顺序相反。
}
}
打印结果:testfuction1
testfuction1fuction2
testfuction2fuction1