我是 ABin-阿斌:写一生代码,创一世佳话。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/01244a35a05f9070bf77418374331efc.
什么是函数式接口
- 只包含一个抽象方法的接口,称为函数式接口。
格式:
修饰符 interface 接口名称{
public abstract 返回值 方法名称(参数列表)
}
修饰符 interface 接口名称{
返回值 方法名称(参数列表
}
自定义函数式接口
格式:
@FunctionalInterface
public interface MyInterface {
void method1();
// void method2();
}
- 可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。
- 可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。
格式:
- 简单的说,在Java8中,Lambda表达式就是一个函数式接口的实例。这就是Lambda表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用 Lambda 表达式来表示。
- 所以以前用匿名实现类表示的现在都可以用 Lambda 表达式来写。
使用函数式接口有哪些好处
- 为了更加方便的使用 Lambda 表达式和支持 OOF(面向函数编程)
常用的函数式接口
不怎么常用的函数式接口
如何去使用函数式接口
案例一:
Consumer 消费型接口的演示
@Test
public void test01(){
happyTime(6799, new Consumer<Double>() {
@Override
public void accept(Double aDouble) {
System.out.println("华为最新款手机 Mate40Pro 的价格为:" + aDouble);
}
});
System.out.println("************Lambda表达式***************");
happyTime(4388,money -> System.out.println("华为 P40 的价格为:"+ money));
}
public void happyTime(double money, Consumer<Double> consumer){
consumer.accept(money);
}
案例二:
Predicate 断定型接口演示:判断集合中带有 “小” 字的都进行输出
@Test
public void test02(){
List<String> list = Arrays.asList("小星星","小东东","小西西","小楠楠","小朋友","张北北");
List<String> filter = filterString(list, new Predicate<String>() {
@Override
public boolean test(String s) {
return s.contains("小");
}
});
System.out.println(filter);
System.out.println("*********Lambda表达式***************");
List<String> filter2 = filterString(list,s -> s.contains("小"));
System.out.println(filter2);
}
public List<String> filterString(List<String> list, Predicate<String> predicate){
ArrayList<String> filterList = new ArrayList<>();
for (String s : list) {
if(predicate.test(s)){
filterList.add(s);
}
}
return filterList;
}