Java-lambda表达式及其应用
lambda表达式及其应用
一.简介
lambda表达式实质上是一个没有方法名的匿名方法。 例如:
int fun1(int x, int y){ return x*y+10; }
用lambda表达式可以表示为:
(int x, int y) -> x*y+10;
作用
-
使得代码变得异常简洁 避免匿名内部类定义过多 去掉了一堆没有意义的代码,只留下核心的逻辑
表达格式
lambda表达式通常以“(argument)->(body)”这样的格式书写,其中“->”被称为lambda运算符或箭头运算符,具体有两种形式:
-
(arg1, arg2,…) -> {body} //省略参数类型 (Type1 arg1, Type2 arg2…) -> {body}//指定参数类型
在表达式中,参数可以是零个或者多个;参数的类型可以指定也可以省略,若参数类型省略,Java编译器会根据表达式的上下文推导出参数的类型。
二.应用
lambda表达式不是独立执行的,而是经常被应用在函数式的接口定义的抽象方法实现中。 下面先简单介绍什么叫函数式接口:
1.函数式接口
函数式接口是只包含一个抽象方法的接口,又被称为单例抽象类接口。 例:
public interface Runnable{ void run(); }
该接口中只包含了一个抽象方法run(),故为一个典型的函数式接口。 例:用传统方法来表达接口的实现:
interface myInter{ //函数接口 double compute(double x, double y); //唯一的抽象方法 } class myInple1 implements myInter{ public double compute(double x,double y){//抽象方法的第1种实现 return x+y; } } class myInple2 implements myInter{ public double compute(double x,double y){//抽象方法的第2种实现 return x-y; } } class myInple3 implements myInter{ public double compute(double x,double y){//抽象方法的第3种实现 return x*y; } } class myInple4 implements myInter{ public double compute(double x,double y){//抽象方法的第4种实现 return x/y; } } public class nolambdaTest { public static void main(String[] args){ myInple1 add = new myInple1(); System.out.println("90.0和5.0两个数求和,结果为:"+add.compute(90.0,5.0)); myInple2 sub = new myInple2(); System.out.println("90.0和5.0两个数求差,结果为:"+sub.compute(90.0,5.0)); myInple3 mul = new myInple3(); System.out.println("90.0和5.0两个数求积,结果为:"+mul.compute(90.0,5.0)); myInple4 div = new myInple4(); System.out.println("90.0和5.0两个数求商,结果为:"+div.compute(90.0,5.0)); } }
改用lambda表达式来实现:
interface myInter{ //函数接口 double compute(double x, double y); //唯一的抽象方法 } public class lambdaTest1 { public static void main(String[] args){ myInter add = (m,n) -> m+n; System.out.println("90.0和5.0两个数求和,结果为:"+add.compute(90.0,5.0)); myInter sub = (m,n) -> m-n; System.out.println("90.0和5.0两个数求差,结果为:"+sub.compute(90.0,5.0)); myInter mul = (m,n) -> m*n; System.out.println("90.0和5.0两个数求积,结果为:"+mul.compute(90.0,5.0)); myInter div = (m,n) -> m/n; System.out.println("90.0和5.0两个数求商,结果为:"+div.compute(90.0,5.0)); } }
这样写会比较简洁,而且也易于理解。
-
注意:使用lambda表达式时,函数式接口所定义的抽象方法的类型必须与lambda表达式的类型兼容,如果不兼容,就会导致编译出错。
上一篇:
IDEA上Java项目控制台中文乱码