个人笔记之Lambda
Java 8 中提供了lambda表达式的写法,使用lambda表达式能大大减少重复的代码的出现率,能提高代码运行效率,无形中还提高了编写代码的满足感。
其实就是用内部方法直接重写需要的方法,不需要再添加到代码中。
其实是为了程序员减少压力(偷懒)使用的一种规范(初级)
高级是为了释放内存,减少内存压力
初级语法:
(参数列表)->{要重写的方法;};
高级语法:
A a = p::print;
四大内置函数式接口:
函数式接口:接口中有且仅有一个方法等待实现,用@FunctionalInterface来标识
可以理解为,实现该接口时就是直接把该接口内自带的(仅有一个的)方法映射为一个已经写好的指定方法,
-
Consumer:
消费型接口,传入一个参数,无返回值。内置方法为accept()
public interface Consumer<T> { void accept(T t); }
例:
String str = "123"; //表示此时Consumer函数式接口中的唯一的方法等价于System.out中的println方法 Consumer c = System.out::println; c.accept(str);
-
Supplier:供给型接口,传入一个参数,返回一个指定类型的返回值。内置方法为get()
public interface Supplier<T> { T get(); }
-
Function:功能型接口,传入两个参数,返回一个指定类型的结果
public interface Function<T, R> { R apply(T t); }
-
Predicate:断言型接口,传入一个参数,返回一个布尔类型的值
public interface Predicate<T> { boolean test(T t); }
status:
理解了但是不熟
稍微熟悉一点了,日常运用可以了
低级:()->{}参数带方法,直接写方法
高级:
::
直接引用,例:打个招呼,翻译,就跟他一样!
例:System.out::print;
翻译:该方法用法参照System.out中的print方法,只要用这个语句代替了的函数,其中唯一的那个函数
都会被当做print方法使用
优点:不用写重复的代码和方法,也无需从别的地方调用,直接用函数接口借用已经写好的方法,省时省力,还能节省资源空间(这就是代码调优吧)
缺点:一个lambda只能实现一个方法,如果需要用某个类中的多个方法的话还是老老实实重写或者调用比较实在。