Lambda表达式基本概念
- 函数式接口:定义了有且仅有一个抽象方法的接口,哪怕接口中有其他默认的方法。
- 允许以内联的方式函数式接口的抽象方法提供实现,并把整个表达式作为函数接口的实现(具体的说是函数接口的具体实现)
- Lambda函数的签名:()->{};
- 函数描述符:函数表达式的签名基本上就是lambda表达式的签名。我们将这抽象的方法叫做函数描述符。
JAVA8中提供了4种函数式接口,分别如下
- Predicate(断言型接口)
提供一个 boolean test(T):传入一个T参数,返回一个boolean值
- Consumer(消费型接口,有去无回)
提供一个 void accept(T):传入一个T参数,无返回值
- Function(功能性接口,有去有回)
提供一个 R apply(T):传入一个T参数,返回一个R值
- Supplier(供给型接口)
提供一个 R get():无传入参数,返回一个R值
相应的简单实现如下
@Test
public void test1() {
Predicate<Integer> predicate = (x)->x>100;
predicate.test(101);
}
@Test
public void test2() {
Consumer<Integer> consumer = (x)->System.out.println(++x);
consumer.accept(999);
}
@Test
public void test3() {
Supplier<String> supplier = ()->"hello";
System.out.println(supplier.get());
}
@Test
public void test4() {
Predicate<Integer> predicate = (x)->x>100;
predicate.test(101);
}
@Test
public void test5() {
Function<Integer, String> function = (x)->"result:"+x;
function.apply(520);
}
同时这四个接口还有一些子类接口,可以实现更多的操作
在package java.util.function;包中