定义为匿名类的函数在用于编码时有些笨拙。幸运的是,Java 8引入了lambda。lambda并不会改变定义Function接口的方式,但是它们让实现变得非常简单。
1 类型推断
lambda并不只是简化语法,它还为代码编译提供了类型推断。lambda和编写匿名类的传统方式的最大区别就是,它可以省略等式右边的类型。Java 8关于类型推断的新功能使之成为可能。
这里就是用java8提供的函数式接口java.util.function.Function演示
public interface Function<T, R>{
R apply(T t);
}
eg:
@Test
public void test1(){
/**
* 这里a就会被推断为String类型(apply方法的入参类型就是String),
* 返回值就会被推断为Integer
*/
Function<String,Integer> function = (a) -> {
return a.length();
};
System.out.println(function.apply("hello"));
}
2 lambda表达式简化
lambda表达式当满足一些条件的时候还有可以简化:
- 如果内部实现只有一行代码可以省略大括弧和return
Function<String,Integer> function = (a) -> a.length();
- 如果形参只有一个参数可以省略小括弧
Function<String,Integer> function = a -> a.length();
- 无法总结其特点。。。
Function<String, Integer> function = String::length;