JDK1.8新特性之Lambda表达式
Lambda表达式
Lambda使用注意事项:
1. 并非所有的接口都可以使用Lambda表达式,只有函数式接口可以使用。可以使用@FunctionalInterface注解标注函数式接口,提前进行检查。
函数式接口:只能有一个抽象方法的接口(不包括默认方法以及静态方法)
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);
}
}