概述:特殊的匿名内部类,书写格式参照着匿名内部类来改造即可
用法:可以将lambda表达式(相当于匿名内部类的传参写法)以参数形式传递
lambda语法结构:
接口引用 = (参数)->{}
描述:->左边是匿名内部类中重写方法的参数
->右边是匿名内部类中的函数体及返回值
细节1:如果匿名内部类的重写方法体只有一条语句,return和{}可以省略
细节2:lambda表达式可以通过接口引用自动识别结构
细节3:()中只填写参数名即可;如果只有一个参数,则可省略()
细节4:形参列表为空,则保留()
细节5:lambda表达式不会单独生成内部类文件
案例1:线程的创建
//Lambda表达式:
new Thread(()->System.out.println("lambda表达式启动")).start();
案例2:比较器方法
//lambda表达式:
Comparator<Integer> com2 = (c1,c2)->c1-c2;
1.2 自定义函数式接口
函数式接口:也是lambda表达式的内容,约定了接口中只有一个方法
自定义函数式接口: 定义usb接口
@FunctionalInterface //函数式接口注解
interface IUsb{
void connect(); //只能有一个方法
}
main(){
//lambda表达式
IUsb usb2 = ()->System.out.println("lambda表达式");
usb2.connect();
}
1.3 系统提供的函数式接口
系统定义好的函数式接口
1.消费型接口:Consumer
2.供给型接口:Supplier
3.函数型接口:Function
4.断言型接口:Predicate
分析: 左边接口引用 右边先写匿名内部类,再改造成lambda表达式
-----1.消费型接口:有参数无返回值类型-----
Consumer<Integer> consumer2 = m->System.out.println("消费了"+m);
consumer2.accept(800);
----2.供给型接口:无参数有返回值类型-----
Supplier<Integer> supplier2 = ()->new Random().nextInt(8);
System.out.println(supplier2.get());
----3.函数型接口:有参数有返回值类型-----
Function<String, String> function2 = t->t.toUpperCase();
System.out.println(function2.apply("hello")); //HELLO
---4.断言型接口:有参数有返回值类型,返回boolean类型-----
Predicate<Integer> predicate2 = t->t>5;
System.out.println(predicate2.test(8)); //true
1.4 方法引用(了解)
是lambda表达式的简化写法;只不过用在特别的场景,不作为重点
//案例:打印方式的简写
//lambda表达式: 可以打印参数以外信息
Consumer<Integer> con = m->System.out.println("消费了"+m);
con.accept(600);
//使用方法引用继续简化: 只能打印参数信息,特定场景使用
Consumer<Integer> con2 = System.out::println;
con2.accept(800);
浙公网安备 33010602011771号