lambda表达式
函数式编程,在我看来是拿来主义,
IntStream.of(数组)然后可以对数组进行各种操作,如取最大最小值等,这个操作也支持多线程,可以使用IntStream.of(数组).parallel()来操作
lambda表达式,我们可以使用lambda表达式来创建实现指定接口的对象如:
Runnable runnable = () -> System.out.println("..."); //可以使用lambda表达式来实现对象的接口,只能有一个方法,()内放的是这个方法的参数,如果只有一个参数可以不写这个括号,->的内容放的是方法的具体实现,如果有多行代码可以用{}括起来
可以使用@FunctionalInterface注解来在编译时检查该接口是否只有一个函数(非default函数)
Java8中接口可以有自己实现的方法,该方法被default修饰,对象直接继承default方法
如果要创建多个只有一个方法的接口是比较麻烦的,可以使用Function<,>接口来代替,其中只有一个apply()方法,还有多个典型的这样的接口
这个表中列举了,java8中lambda表达式经常使用的接口
当lambda表达式中只有一个参数,并且在方法体中只有一个函数调用语句,这个函数调用语句的参数正是传入的参数时,可以使用方法引用来简写lambda表达式,例如 :s -> System.out.println(s) 可以简写为 System.out::println
方法引用,我们可以引用静态方法,非静态方法,和构造方法,其中静态方法直接使用类名引用,如Dog::bark,非静态方法可以使用对象或者类名引用,需要记住,使用类名引用的话,要在第一个参数的位置,传入一个该类型的对象,想要引用构造方法的话类名::new这样的写法就可以,例如Dog::new