Java8新特性之-Lambda表达式

为了写出更简洁,更灵活的代码,java8引入了一种新的操作符“->”,该操作符称为Lambda操作符或者箭头符。
   1.符号的左侧:Lambda表达式的参数列表
   2.符号的右侧:Lambda表达式中所需执行的功能

注:使用lambda的前提存在“函数式接口”,所谓的函数式接口是指该接口只能有一个抽象的方法。为了保证某接口是函数式接口,该接口可使用注解@FunctionalInterface修饰
例如Consumer,它是java内置的四大常用函数式接口之一。


函数式接口.png

Lambda是一个匿名函数:它相当于函数式接口的匿名实现类,通过lambda表达式可以实现接口中的方法,并返回接口类型。
例如:
@FunctionalInterface
public class Functions{
 public R getValue(T t);
}
使用Lambda表达式实现接口中的抽象方法:
public class Test{
 public static void main(String[] args){
   int price = 10;
  printStr(price, (x)->Integer.toString());
 }
 static void printStr(int price, Functions f){
  String s = f.getValue(price);
  System.out.println(s);
 }
}
使用匿名内部类
public class Test{
 public static void main(String[] args){
   int price = 10;
  printStr(price, new Functions(){
   public String getValue(int p){
   return Integer.toString(p);
  }
});
 }
 static void printStr(int price, Functions f){
  String s = f.getValue(price);
  System.out.println(s);
 }
}

Lambda的基础语法:
语法一:函数式接口中的方法无参数列表,无返回值
例如:() -> System.out.println("hello world");
语法二:函数式接口中的方法有一个参数,无返回值
(x) -> System.out.println(x);
语法三:若只有一个参数,小括号可以省略不写
语法四:有两个以上参数,有返回值,并且Lambda体中存在多条语句
Comparator com = (x, y) -> {
 System.out.println(x + ":"+ y);
 return Integer.Compare(x, y);
}
语法五:若Lambda只有一条语句,return和大括号都可以省略不写
语法六:Lambda表达式中的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出数据类型,即类型推断
一般不这样写:(String s1, String s2) -> s1.compareTo(s2);
一般写成:(s1, s2) -> s1.compareTo(s2);
注:Lambda的底层仍然是封装成方法,只不过写起来更加方便了

你可能感兴趣的:(Java8新特性之-Lambda表达式)