Lambda表达式

Lambda使用注意事项:

1. 并非所有的接口都可以使用Lambda表达式,只有函数式接口可以使用。可以使用@FunctionalInterface注解标注函数式接口,提前进行检查。

函数式接口:只能有一个抽象方法的接口(不包括默认方法以及静态方法)

JDK1.8新特性之Lambda表达式_lambda表达式

JDK1.8新特性之Lambda表达式_lambda表达式_02

Lambda使用步骤

一、创建函数式接口

只存在一个抽象方法的接口就是函数式接口;

没有方法体的方法叫做抽象方法

package cn.godfery.api;

/**
* @author Godfery
*/
public interface LambdaApi {

@FunctionalInterface //检查是否为函数式接口
/**
* 函数式接口, 包含一个方法: 输出Hello, world
* */
interface PrintHelloWorld {
/**
* 无参数无返回值, 打印输出: Hello, world
* */
void printHelloWorld();
}

@FunctionalInterface
/**
* 函数式接口, 包含一个方法: 打印输出传入参数
* */
interface PrintParameter {
/**
* 一个参数无返回值, 打印输出传入参数
* @param parameter 传入参数, 原样输出
* */
void printParameter(String parameter);
}

@FunctionalInterface
/**
* 函数式接口, 包含一个方法: 返回传入参数
* */
interface ReturnParameter {
/**
* 一个参数一个返回值, 返回传入参数
* @param parameter 传入参数, 原样返回
* @return 返回传入参数
* */
String returnParameter(String parameter);
}

@FunctionalInterface
/**
* 函数式接口, 包含一个方法: 返回两个int类型参数之和
* */
interface Add {
/**
* 两个参数一个返回值
* 返回两个int类型参数之和
* @param number1 第一个进行加运算的参数
* @param number2 第二个进行加运算的参数
* @return 返回两参数之和
* */
int add(int number1, int number2);
}
}


二、使用Lambda来实现接口中的抽象方法

package cn.godfery.test;

import cn.godfery.api.LambdaApi;

/**
* @author Godfery
*/
public class LambdaTest {
public static void main(String[] args) {
// 无参无返回值
LambdaApi.PrintHelloWorld printHelloWorld = () -> {
System.out.println("Hello, world");
};

// 一个参数无返回值
LambdaApi.PrintParameter printParameter = (String parameter) -> {
System.out.println(parameter);
};

// 一个参数一个返回值
LambdaApi.ReturnParameter returnParameter = (String parameter) -> {
return parameter;
};

// 两个参数一个返回值
LambdaApi.Add add = (int number1, int number2) -> {
return number1 + number2;
};

printHelloWorld.printHelloWorld();

printParameter.printParameter("Good morning");

System.out.println(returnParameter.returnParameter("Hello"));

int sum = add.add(12, 23);
System.out.println(sum);

}
}



三、运行测试

JDK1.8新特性之Lambda表达式_抽象方法_03