public class LambdaDemo {
public void printSomething(String something) {
System.out.println(something);
}
public static void main(String[] args) {
LambdaDemo demo = new LambdaDemo();
String something = "I am learning Lambda";
demo.printSomething(something);
}
}
这个是一段经典的oop开发场景.
下面一个例子使用了行为传递方式,而不是变量传递的等效实现.
public class LambdaDemo {
interface Printer {
void print(String val);
}
public void printSomething(String something, Printer printer) {
printer.print(something);
}
}
public static void main(String[] args) {
LambdaDemo demo = new LambdaDemo();
String something = "I am using a Functional interface";
Printer printer = new Printer() {
@Override
public void print(String val) {
System.out.println(val);
}
};
demo.printSomething(something, printer);
}
Lambda 表达式原被用于定义一个函数式接口的内联实现。
(param1,param2,param3…,paramN) - > {//代码块;}
一个 lambda 表达式的组成,是一个我们通常会定义在方法声明中的,以括弧封闭起来并以逗号分隔的参数列表,后面跟上一个箭头标记指向要执行的代码。现在,让我们来使用 lambda 对上面的代码进行重构:
public static void main(String[] args) {
LambdaDemo demo = new LambdaDemo();
String something = "I am learning Lambda";
/**/
Printer printer = (String toPrint)->{System.out.println(toPrint);};
/**/
demo.printSomething(something, printer);
}
在参数为这些接口的地方,我们就可以直接使用lambda表达式了!
Predicate——接收T对象并返回boolean
Consumer——接收T对象,不返回值
Function<T, R>——接收T对象,返回R对象
Supplier——提供T对象(例如工厂),不接收值
UnaryOperator——接收T对象,返回T对象
BinaryOperator——接收两个T对象,返回T对象