为什么使用Lambda表达式
Lambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁,更灵活的代码
匿名内部类和Lambda表达式
在匿名内部类中,其实有用的代码也是我们需要的代码其实就只有一句,其他的代码都是为了写那一句而写,所以在Java8的新特性中,出现了Lambda表达式,一句代码就可以实现,避免写多余代码,使我们的代码更简洁
Lambda表达式的基础语法
java8中引入了一个一个新的操作符"->",该操作符称为箭头操作符或者Lambda操作符,Lambda操作符将Lambda表达式拆分成为左右两部分
左侧:Lambda表达式的参数列表
右侧:Lambda表达式中所需执行的功能,即Lambda体
语法格式
一、无参数,无返回值
在java中正好Runnable接口中的run方法无参,无返回值
运行结果
二、一个参数,无返回值。
若参数只有一个那么箭头操作符左边的参数列表不用写小括号
运行结果
三、有多个参数,有返回值,Lambda体中有多条语句
Lambda体中若有多条语句,则需要用大括号括起来
四、有多个参数,有返回值,Lambda体中只有一条return语句,那么大括号和return都可以不写
Lambda体则表示了返回的数据
五、Lambda参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出数据类型,即”类型推断“
Lambda表达式需要函数式接口的支持
函数式接口:接口中只有一个方法的接口。可以用注解@FunctionalInterface 修饰,因为这个注解修饰的接口必须是函数式接口
四大内置核心函数型接口
Consumer : 消费型接口
accept(T t);
传入一个T
Supplier : 供给型接口
T get();
返回一个T
创建十个0-100的数字放入集合中
运行结果
Function<T,R> :函数型接口
R apply(T t);
传入一个T,返回一个R
运行结果
Predicate :断言型接口
boolean test<T t>;
传入一个T,返回一个布尔值
运行结果
其他接口
Stream流API的简单使用
用流来进行循环打印
用流去重后再进行循环打印
去重后 返回一个新的newList 再进行打印
直接打印list中有多少个元素
创建新的Stream,通过Stream来创建
把数组转换成Stream 然后调用过滤方法 再给预测参数(自动预测类型) 最后过滤计数
映射
组合
join