在我们看他人code的时候经常会看到,可能会经常看到lambda表达式,函数式接口,以及流式计算。在刚接触这些新功能时,也觉得真的有必要吗?但是现在写多了,发现这个功能确实能简化代码结构,提升编码效率。lambda表达式,函数式接口,流式计算单个来用确实非常难用,但是整合到一起,就会发生非常奇妙的反应。
lambda表达式
lambda表达式允许把函数作为一个方法的参数。即,函数作为参数传递进方法。
lambda语法
(parameters) -> expression
OR
(parameters) -> {statements;}
lambada表达式的几个重要特征:
- 可选类型声明:不需要申明参数类型,编译器可以统一识别参数类型
- 可选参数圆括号:一个参数无需定义圆括号。但是多个参数需要定义圆括。
- 可选大括号:如果主体只包含了一个语句,就不需要使用大括号。
- 可选返回关键字:如果主体只有一个表达式返回值,编译器会自动返回值。
// 1. 不需要参数,直接返回值
() -> 3
// 2. 接收一个参数,返回其两倍
x -> 2 * x
// 3. 接收两个数字, 返回差
(x, y) -> x - y
lambda reference方法
public class Test {
public int addOne(int a){
return a;
}
public static int ssaddOne(int a){
return a;
}
public static void main(String[] args) {
BiFunction addOne = Test::addOne;
Function addOne1 = new Test()::addOne;
Function ssaddOne = Test::ssaddOne;
}
}
函数式接口
什么是函数式接口
函数式接口就是有且仅有一个 抽象方法的接口。(但是可以有多个非抽象方法)。
函数式接口可以被转换为lambda表达式。
四大函数式接口
`java
java.util.function.Consumer
// 消费者:接收一个参数,没有返回值
@FunctionalInterface
public interface Consumer {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
}
java.util.function.Supplier
// 提供者:不接受任何参数,返回会一个参数
@FunctionalInterface
public interface Supplier {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
Original: https://www.cnblogs.com/hardyzhou/p/16610613.html
Author: hardyzhou
Title: Java的lamda表达式/函数式接口/流式计算
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585144/
转载文章受原作者版权保护。转载请注明原作者出处!