上面是Lambda?

Lambda是一个 匿名函数,Lambda表达式是一段可以传递的代码 

能做什么?

可以写出更简洁、更灵活的代码。使java语言表达能力得到 提升。

特性: 

  1. 在Lambda表达式中不需要指定类型
  2. 无参、无返回值,Lambda体只需一条语句 例如:Runnable run1=()-> System.out.println("hello world!");
  3. 无参、有返回值,编译器可以统一识别参数值 例如: x -> 2 * x     返回2倍的x
  4. 一个参数时 不需要圆括号()  例如 x->2*x,但是多个参数时 需要加圆括号。例如(x,y)->x+y   返回x+y的结果
  5. 主体包含一条语句,不需要大括号 {} return也可以省略,多条语句用{}包裹
  6. 如果主体只有一个表达式返回值,则编译器会自动返回值,大括号需要指明表达式返回了一个数值

其中->被称为Lambda操作符

函数式接口  :如果接口中只有一个方法时,被称为函数式接口。

可以使用 @FunctionalInterface注解 检查接口只能有一个抽象方法。

使用Lambda表达式+函数式编程的优点:让一个接口可以实现多种操作。定义了一个接口但是不指定具体功能。通过该接口实现多种操作

函数式接口使用示例:

Fun接口类:

@FunctionalInterface
public interface Fun {
    Integer account(Integer num,Integer num2);
}

FunTest测试类:

import org.junit.Test;

import static org.junit.Assert.*;

public class FunTest {

    @Test
    public void Testaccount() {
        Integer result=operation(10,11,(num1, num2) -> num1 + num2);  // 加法操作,得到10 + 11
        System.out.println(result);

        result=operation(10,11,(num1, num2) -> num1 * num2);  // 乘法操作,得到10 * 11
        System.out.println(result);
    }

    public Integer operation(Integer num1,Integer num2,Fun fun){
        return fun.account(num1,num2);
    }
}

运行结果: 

java8新特性------Lambda表达式_lambda表达式