一、lambda表达式
lambda表达式本质上是一个匿名方法。
注:匿名方法时没有方法名的方法,如
{
System.out.println("这是一个匿名方法");
}
组成:参数列表、箭头、表达式或语句块。
二、函数式接口
只包含一个抽象方法的接口。
Java函数式接口:
java.util.function.Consumer,包含有一个有输入而无输出的accept接口方法。还有一个andThen方法,指定在调用当前Consumer后是否还要调用其它的Consumer方法。
//定义第一个Consumer
Consumer<Integer> consumer1 = (param) -> {System.out.println(param);};
//定义第二个Consumer
Consumer<Integer> consumer2 = (param) -> {System.out.println(param*param)};
consumer1.accept(5); //打印出5
//consumer1调用consumer2
consumer.andTher(consumer2).accept(5); //打印出 5 25
java.util.function.Function,接受一个参数并生成结果,方法有apply、compose、andThen、indentify。
java.util.function.Predicate,包含一个test方法,根据输入值做逻辑判断,其结果为true或者false。
三、函数式编程
实例化对象时,如果使用lambda表达式重写类中的方法,称为函数式编程。
四、流计算
需要多行代码完成的集合操作,借助于流式处理可以在一行中实现。
流式数据具体可看https://blog.csdn.net/canot/article/details/52957262
Java双冒号(::)运算符的使用:
静态方法引用(static method)语法:classname::methodname 例如:Person::getAge
对象的实例方法引用语法:instancename::methodname 例如:System.out::println
对象的超类方法引用语法: super::methodname
类构造器引用语法: classname::new 例如:ArrayList::new
数组构造器引用语法: typename[]::new 例如: String[]:new