java 8 新特性(lambda语法)
Lambda能够取代某些匿名内部类,使用lambda表达式的一个注意的地方是,它调用的接口为函数式接口(只定义了一个抽象方法的接口)。
Lambda表达式新增一个“->”箭头操作符也叫Lambda操作符,其作用是将Lambda拆分为两个部分。左侧为Lambda的参数列表 -> 右侧为Lambda表达式的功能。例:
徒手打的代码,不保证一定能运行,如发现错误还望告知
public interface frist<T>{
void accept(T t);
}
public static testLambda{
@Test
public void testLambda(){
first<String> num1=(x) -> System.out.println(x);
num1.accept("一段测试文字");
}
}
重点看红色部分,这个例子只是让我们明白它的左右两边放些什么东西。具体的语法我们下面来介绍
我们的Lambda表达式左右两边分别由 ( ) -> { }两种括号括起来,或许你看到这有疑问了,为什么我上面的例子右边没有{ }呀?别急,等我把语法介绍完你就懂啦。
既然我们这是一个关于接口的表达式,接口的情况也各不相同,有无参的有参,一个参数多个参数,无返回值有返回值的,我们的表达式也跟随着接口的不同,而语法格式上有略微的不同。
- 无参数无返回值 无参数传入则左边参数列表则左边括号为 空( ) -> System.out.println("测试"); 右边无需有返回值
- 1个参数无返回值 当只有一个参数是左边括号可保留也可以省略即 x -> System.out.println("x");右边无需有返回值
- 多个参数,有返回值,且Lambda体中有多个表达式,则表达式为 (x,y,z,...) -> { System.out.println("x"); retuen y;}
若lambda体中只有一条语句{}与return 这个单词也可以省略,Lambda表达式中参数的类型可以不写,因为JVM编译器能通过上下文推断出数据类型,即“数据推断”。
语法总结一句话:左右遇一括号省,左侧推断类型省。接下来我要用java 8自带的四大核心函数接口来举一些例子。
首先介绍一下这四大核心接口:
Consumer<T> :属于消费型接口,即无返回值但需传参。抽象方法为 void accept (T t)
Supplier<T> :属于供给型接口,即有返回值无传参。抽象方法为 T get()
Function<T> :属于函数型接口 ,既有返回值也要传参。抽象方法为 R apply(T t)
Predicate<T>:属于断言型接口,返回值为boolean类型。抽象方法为 boolean test(T t)
上面我介绍了Lambda,现在又了解了四个核心接口,下面我将放一些我写的实例来帮助大家理解
输出结果为100
输出结果如下
输出结果如下
输出结果如下