SentralLiu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

概述:特殊的匿名内部类,书写格式参照着匿名内部类来改造即可
用法:可以将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);

posted on 2021-11-16 19:39  SentralLiu  阅读(31)  评论(0)    收藏  举报