Lambda表达式

Lambda表达式(Lambda Expressions)


什么是Lambda表达式

Lambda Expressions enable you to encapsulate a single unit of behavior and pass it to other code. ——[官网原文]
lambda表达式可以把代码中的某一个行为包装起来,并把这个包装好的行为传给其他代码。

不懂?不要着急,请接着往下看↓


Lambda表达式的作用

One issue with anonymous classes is that if the implementation of your anonymous class is very simple, such as an interface that contains only one method, then the syntax of anonymous classes may seem unwieldy and unclear.——[官网原文(节选)]

使用匿名类时,会碰到这样的问题——如果这个匿名类是一个很简单的类,比如:其中只包括一个接口,接口里只有一个方法,那么这个匿名类用起来时的语法会看起来很不直观,很不清晰。Lambda表达式可以解决这个问题。

  • 使代码更加简洁,比起较为简单匿名类来说,含义更清晰易懂
    先来个例子感受一下:
//首先,定义一个接口,叫IHelloLambda,里面只有一个方法,叫print
public interface IHelloLambda {
    void print(String s);
}
//现在用匿名类的方法来使用它
public static void main(String[] args) {
    IHelloLambda Anonymous = new IHelloLambda() {    //使用匿名类实现了print接口
        @Override
        public void print(String s) {
            System.out.println("hello" + s);
        }
    };
    Anonymous.print("anonymous");                     //调用print方法
}
//现在用lambda表达式来使用它
public static void main(String[] args) {
    IHelloLambda lambda = (a)->System.out.println("hello" + a);//lambda表达式完成匿名类的行为
    lambda.print("lambda");                               //调用print方法
}

是不是代码更加简洁,清晰了?


Lambda表达式语法

参考官网lambda表达式语法

lambda表达式包含以下几个元素:

  • 以逗号分隔的方法入参,可以省略入参的类型声明,如果入参有多个,要打上括号,如果入参只有一个,可以省略括号。
  • 一个箭头符号”->”
  • 代码主体,包含了一个表达式或者代码块。可以用大括号括起来。
    比如上文中的例子:
(a)->System.out.println("hello" + a);

可以写成

a->{                                    //省略括号
    System.out.println("hello" + a);    //用大括号把代码块包起来
}

这几条规则总结起来就是如下例子:

public class Calculator {                                     //计算器类

    interface IntegerMath {                                   //整数算术接口,里面有一个方法,叫"操作",包含2个整型入参,a和b
        int operation(int a, int b);   
    }

    public int operateBinary(int a, int b, IntegerMath op) {  //两个数的操作,入参为整型a,b,和接口对象op
        return op.operation(a, b);                            //返回整型op调用operation后的结果
    }

    public static void main(String... args) {

        Calculator myApp = new Calculator();
        IntegerMath addition = (a, b) -> a + b;               //接口addition(加法),lambda表达式实现接口,入参a,b,返回a+b的值
        IntegerMath subtraction = (a, b) -> a - b;            //接口subtraction(减法),入参a,b,返回a-b的值
        System.out.println("40 + 2 = " +                      //打印40+2的结果,调用operateBinary,输入为a,b和接口addition
            myApp.operateBinary(40, 2, addition));            
        System.out.println("20 - 10 = " +                     //打印20-10的结果,调用operateBinary,输入为a,b和接口subtraction
            myApp.operateBinary(20, 10, subtraction));    
    }
}

Lambda表达式使用场景举例

本节主要参考lambda表达式示例和官网使用案例


还是不懂?
请参考以下几篇我觉得不错的文章:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值