Lambda表达式与函数式接口的关系:
Lambda是函数式接口实现的快捷方式,它相当于函数式接口实现的实例,因为在方法中可以使用Object作为参数,所以把Lambda表达式作为方法参数也不是不可以。
函数式接口只有一个抽象方法,并且没有重写Object类中的方法(public方法除外),可以有默认方法和静态方法。
自定义函数式接口一般用注解 @Functionallnterface标注
在使用Lambda表达式作为参数的时候必须使用函数式接口来接收参数,Java8已经定义好了一些内置的函数式接口,可以解决开发过程中绝大部分为题,小部分特殊的问题需要自定义函数式接口。
例子:过滤集合中大于100的数字
public List<Integer> filterInt(List<Integer> list, Predicate<Integer> pre) {
List<Integer> l = new ArrayList<>();
for (Integer integer : list) {
if (pre.test(integer)) {
l.add(integer);
}
}
return l;
}
@Test
public void test4 () {
List<Integer> l = new ArrayList<>();
l.add(102);
l.add(172);
l.add(13);
l.add(82);
l.add(109);
List<Integer> list = filterInt(l, x -> (x > 100));
for (Integer integer : list) {
System.out.println(integer);
}
}
更多接口详见:Java 8函数式接口