1 简介

简化调用匿名内部类,优点代码简洁,缺点需要程序员水平高。并且lambda表达式简化接口方法,该接口必须只能有一个方法,并且被实现了。

2 使用规范

2.1 标准格式

  1. (参数列表) ‐> {
  2. 方法体
  3. }
  • 格式说明:

    • (参数类型 参数名称):参数列表。
    • {代码体;}:方法体。
    • ->:箭头,没有实际含义,起到连接的作用。

      2.2 无参数的lambda表达式

  • 可选大括号

    1. () -> new Student();
    2. () -> {
    3. new Student();
    4. }

    2.3 只有一个参数的lambda表达式

  • 括号可选

    1. x ‐> {
    2. System.out.println(x);
    3. return x;
    4. }
    5. (x) ‐> {
    6. System.out.println(x);
    7. return x;
    8. }

    2.4 多个参数的lambda表达式

  • 括号必须

    1. (int x,int y) ‐>{
    2. System.out.println(x);
    3. System.out.println(x);
    4. return x+y;
    5. }
  • 类型可选

    1. (x,y) ‐>{
    2. System.out.println(x);
    3. System.out.println(x);
    4. return x+y;
    5. }

    2.5 一个参数和语句的lambda表达式

  • 可选return

    1. x ‐> 3+x;
    2. x ‐> return 3+x;

    3 代码实现

    3.1 无参无返回值

    3.1.1 创建获取时间方法

    @FunctionalInterface :修饰函数式接口的,要求接口中的抽象方法只有一个。

    1. /**
    2. * 无参无返回值
    3. */
    4. @FunctionalInterface
    5. public interface Time {
    6. /**
    7. * 获取现在的时间
    8. */
    9. void getNowTime();
    10. }

    3.1.2 无参数无返回无Lambda表达式

    1. /**
    2. * 无参数无返回无Lambda表达式
    3. */
    4. @Test
    5. public void noParamNoVoidForNoLambda() {
    6. Time time = new Time() {
    7. @Override
    8. public void getNowTime() {
    9. System.out.println("现在的时间:"+new Date());
    10. }
    11. };
    12. time.getNowTime();
    13. }

    3.1.3 无参数无返回有Lambda表达式

    1. /**
    2. * 无参数无返回有Lambda表达式
    3. */
    4. @Test
    5. public void noParamNoVoidForLambda() {
    6. Time time = () -> {
    7. System.out.println("现在的时间:"+new Date());
    8. };
    9. time.getNowTime();
    10. }

    3.1.4 以方法调用的lambda表达式

    ```java /**

    • 以方法调用的lambda表达式 */ @Test public void noParamNoVoidForLambdaFunction() { getNowTime(() -> {
      1. System.out.println("现在的时间:" + new Date());
      }); }

public void getNowTime(Time time) { time.getNowTime(); }

  1. <a name="fsGl1"></a>
  2. ## 3.2 多参数无返回
  3. <a name="O6k4Q"></a>
  4. ### 3.2.1 创建获取天数和月数
  5. ```java
  6. /**
  7. * 多参数无返回
  8. */
  9. @FunctionalInterface
  10. public interface Week {
  11. /**
  12. * 获取星期几
  13. * @param date 日
  14. * @param month 月
  15. */
  16. void getDay(int date,int month);
  17. }

3.2.2 多参数无返回无Lambda表达式

  1. /**
  2. * 多参数无返回无lambda表达式
  3. */
  4. @Test
  5. public void haveParamNoVoidNoLambda() {
  6. Week week = new Week() {
  7. @Override
  8. public void getDay(int date, int month) {
  9. System.out.println("data:" + date + ",month:" + month);
  10. }
  11. };
  12. week.getDay(10,2);
  13. }

3.2.3 多参数无返回有lambda表达式

  1. /**
  2. * 多参数无返回有lambda表达式
  3. */
  4. @Test
  5. public void haveParamNoVoidForLambda(){
  6. Week week =(date, month) -> {
  7. System.out.println("data:" + date + ",month:" + month);
  8. };
  9. week.getDay(20,3);
  10. }

3.3 多参数返回值

3.3.1 创建食物方法

  1. @FunctionalInterface
  2. public interface Food {
  3. int compareTo(int o1,int o2);
  4. }

3.3.2 多参数返回值有lambda表达式

  1. @Test
  2. public void haveParamHaveVoidLambda() {
  3. Food food = (o1, o2) -> o1 + o2;
  4. int result =food.compareTo(3,2);
  5. System.out.println(result);
  6. }