lambda表达式笔记
程序员文章站
2022-10-13 15:31:00
前几天一位好友分享了一篇文章,其中讲到了lambda表达式,正好最近看了一些内容,就做做笔记吧... lambda表达式服务于函数式接口,如果需要一个函数式接口的对象时,就可以用lambda表达式代替 什么是函数式接口? 1.最主要的一点是只包含一个抽象方法的接口(Object类的方法不算啊)2.带 ......
前几天一位好友分享了一篇文章,其中讲到了lambda表达式,正好最近看了一些内容,就做做笔记吧...
lambda表达式服务于函数式接口,如果需要一个函数式接口的对象时,就可以用lambda表达式代替
什么是函数式接口?
1.最主要的一点是只包含一个抽象方法的接口(object类的方法不算啊)
2.带有@functionalinterface注解的一定是函数式接口,但是不代表没有该注解就表示不是,只要是一个接口,有且只有一个抽象方法,那么就是函数式接口,注解配合编译器可以很好的辅助,我们在自定义函数式接口的时候,也会更加直观,有助于代码的可读性
几个简单的例子
arrays.sort方法需要一个实现了comparator接口的实例,正常情况下,我们需要创建一个实例,然后实现comparator接口,然后将该实例传入arrays.sort方法中,还是比较繁琐的,但是使用lambda表达式就可以非常简化
编译器如果能推导出参数类型,小括号中的参数类型是可以省略的
string[] array = new string[3]; array[0] = "ccc"; array[1] = "bb"; array[2] = "a"; system.out.println(array[0]);// 输出ccc arrays.sort(array, (first, second) -> first.length() - second.length()); system.out.println(array[0]);// 输出a
对于逻辑比较复杂的代码,逻辑处理部分可以使用{}包起来
timer t = new timer(1000, event -> { system.out.println("action"); system.out.println("listener"); }); t.start();
表达式也是可以当作一个参数传递的
string[] array = new string[3]; array[0] = "ccc"; array[1] = "bb"; array[2] = "a"; system.out.println(array[0]); comparator<string> comp = (first, second) -> first.length() - second.length(); arrays.sort(array, comp); system.out.println(array[0]);
如果没有入参的时候,小括号不能省略
thread thread = new thread(() -> { for (int i = 0; i < 100; i++) { system.out.println(i); } }); thread.start();
现在工作主要是用scala语言,scala在语法等方面对比java来讲更加函数化,遍历、排序、过滤等操作甚至来讲只用一行代码就可以完成
但是lambda作为java8的一个大更新,所以还是有必要学习一下新特性的