Lambda是java8最重要的新特性之一,Lambda是java8支持函数式接口编程的核心
它允许把函数作为一个方法的参数
特征:
1:无需声明参数类型,编译器可以识别
2 :如果只有一个参数就不需要圆括号,但多个参数需要圆括号
3: 如果要计算的代码无法放在一个语句,那么可以使用大括号括起来‘
4 : 如果只有一个表达式,则编译器会自动返回值,大括号需要指明表达式返回了一个值
注意:
5 : lambda表达式只能引用标记了final的外层static常量或者处于内层的final常量
public class LambdaTest1 {
public static void main(String[] args){
//无需返回值,编译器会自动返回
Algorithm add = (int a,int b) -> a + b;
//无需指定参数类型和返回值,编译器可以识别
Algorithm sub = (a , b) -> a- b;
//大括号指明表达式返回了一个值
Algorithm multi = (a,b)->{return a+b;};
//不需要大括号和返回值
Algorithm div =( a , b )-> a/b;
System.out.println(add.operation(2,3));
System.out.println(sub.operation(10,4));
System.out.println(multi.operation(13,2));
System.out.println(div.operation(100,40));
final String word1 = "hello java!"; //内层的final常量
Say temp = s -> System.out.println(s);
temp.say(word1); //使用了内层的final常量
temp.say(word2); //使用外层final的static常量
}
static final String word2 = "hello world!"; //外层final的static常量
}
interface Algorithm{
int operation(int a , int b);
}
interface Say{
void say(String s);
}
以lambda作为方法的参数
public class LambdaTest2 {
//因为 p 是一个函数式接口,所以可以利用lambda表达式代替
public static void do1(String s , Print p){
for(int j = 0 ; j != 20 ;++j){
p.print(s);
}
}
public static void main(String[] args){
LambdaTest2.do1("杨某是狗",(s)->System.out.println(s));
}
}
interface Print{
void print(String s);
}