java学习之Lambda表达式
Lambda表达式
Lambda是一个匿名函数:
基本语法:
<函数式接口><变量名>=(参数1,参数2…)->{//方法体 } };
Lambda引入了新的操作符:->(箭头操作符),->将表达式分成两部分,
左侧:(参数1,参数2…) 表示参数列表
右侧:{}内部式方法体
注意事项:形参列表得到数据类型会自动推断。
如果形参列表为空,只需保留()。
如果形参只有一个,()可以省略,只需要参数的名称即可。
如果执行语句只有一句,且无返回值,{}可以省略,若有返回值。则若想省去{},则必须同时省略return,且执行语句也保证只有一句。
Lambda不会生成单独的内部类文件。
函数式接口
如果一个接口只有一个抽象方法,则该接口称之为函数式接口,函数式接口可以使用Lambda’表达式。Lambda表达式会被匹配到这个抽象方法上。@Functionallnterface注解检测接口是否符合函数式接口。
方法引用:
对象::实例方法
类::静态方法
类::实例方法
类::new
Stream
流(stream)与集合类似,但集合保存的是数据,而stream中保存对集合或数组数据的操作。
Stream的特点
Stream自己不会存储元素
Stream不会改变源对象。相反,他们胡返回一个持有结果的新stream
Stream操作时有延迟执行的,会等到需要结果的时候才执行。
创建stream
- 通过Collection对象的stream()或parallel stream()方法
- 通过·Arrays类的stream()方法
- 通过Stream接口的of(),iterate(),generate()方法
- 通过Instream。Longstream、doubleStream接口中的of()、range、rangeClosed方法
中间操作
Filter、limit、skip、distinct、sorted、map、parallel
终止操作
Foreach、min、max、count、reduce、collect
!!!中间操作必须要有终止操作才会有输出