Java8--Lambda表达式与函数式接口

函数式接口:

  • 如果接口中只有一个抽象方法(包括继承的),则该接口是一个函数式接口。
  • 下面的SmartAdder 就不是函数式接口,因为它有两个add方法(继承一个)
public interface Adder{
    int add(int a, int b);
}
public interface SmartAdder extends Adder{
    int add(double a, double b);
}
  • 还可以使用FunctionalInterface注解来限定接口内只能有一个抽象方法。
@FunctionalInterface
public interface FunctionalInterfaceTest {
	void print();
}

lambda表达式:只能使用函数式接口

  • 无参数,无返回值
public static void main(String[] args) {
		// 使用匿名内部类实现
		FunctionalInterfaceTest fit=new FunctionalInterfaceTest() {
			@Override
			public void print() {
				System.out.println("使用匿名内部类实现");
			}
		};
		fit.print();
	// 使用Lambda表达式实现
    // ():表示参数列表 
	// ->:连接符
	// {}:方法体
	FunctionalInterfaceTest fit1 = () -> {
		System.out.println("使用Lambda表达式实现");
	};
	fit1.print();
     // 如果方法体只有一句话,还可以省略大括号及一个分号
    FunctionalInterfaceTest fit2 = () -> System.out.println("使用更简洁的Lambda表达式");
	fit2.print();
}	
  • 有一个参数,无返回值
   public static void main(String[] args) {
		// Lambda表达式有一个参数
		FunctionalInterfaceTest fit3 = (x) -> {
			System.out.println("一个参数:"+x);
		};
		fit3.print(12);
		// 如果只有一个参数可以省略圆括号,还可省略掉大括号
		FunctionalInterfaceTest fit4 = x -> System.out.println("一个参数更简洁:"+x);
		fit4.print(22);
  }
  • 有两个及以上参数,圆括号不可省略
  • 方法体有两行及以上代码时,大括号不可省略。
  • 有返回值
    public static void main(String[] args) {
		// Lambda表达式有返回值
		FunctionalInterfaceTest fit3 = (x,y) -> {
			return x+y;
		};
		int c = fit3.add(12,11);
		System.out.println(c);
     // 因为方法体只有一条语句,可以省略大括号
     // 注意在省略大括号时,将return关键字一块省略,如下
     // 对于有返回值的情况,大括号和return关键字是一块出现一块消失的。
     FunctionalInterfaceTest fit3 = (x,y) -> x+y;
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章