java8 表达式_Java8 Labmbda表达式

JAVA8引入的特性,最近看亚马逊的云服务,发现他们要用lambda,也不知道是不是一回事。

一、为什么引入Lambda表达式

匿名内部类有个问题是:如果匿名内部类的结构简单、仅有一个方法时,代码会显得很冗余、不明确。例如当按键被点击时,触发一个行为Action,代码示例如下:

Button button = new Button();

button.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent event) {

System.out.println("hello world");

}

});

而Lambda表达式就是为了压缩这种代码场景。

button.addActionListener( (ActionEvent event) -> System.out.println("hello world") );当方法只有一个参数时,可以将 (ActionEvent event)改写为 event

二、Lambda表达式的举例

1.详细示例:筛选花名册中符合某一条件的人群

//CheckPerson 接口用于表示这种规则,Person类就是对人的封装,有年龄、打印等,不再列举。

interface CheckPerson {

boolean test(Person p);

}

//用于打印符合CheckPerson标准的人群的方法

public static void printPersons(

List roster, CheckPerson tester) {

for (Person p : roster) {

if (tester.test(p)) {

p.printPerson();

}

}

}

a)用匿名内部类来实现

printPersons(

roster,

new CheckPerson() {

public boolean test(Person p) {

return p.getGender() == Person.Sex.MALE

&& p.getAge() >= 18

&& p.getAge() <= 25;

}

}

);

b)用Lambda表达式来实现

printPersons(roster, p -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25);

三、Lambda表达式语法构成:

1.在括号内一组以逗号分隔的参数列表:(Person p)来表示,多参数(A a, B

b, C c)

a)可以省略数据类型:(p)表示

b)当只有一个形参时,可以省略括号:p表示

2.箭头: ->

3.body(主体,类似方法体)由单独的表达式或者statement block(声明块)组成:

a)单独的表达式(single expression)(expression是指由variables, operators, and method invocations,(变量、操作符、方法调用) 组成)

p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25

b)statement block (statment就是expression以分号结尾,block就是一堆的statement)必须用大括号{}封闭:

{return p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25; }

我把a)的表达式转换为 b)的声明(statement),b)。statement block就和方法体是一回事了。如果用表达式(expression)编译器会自动检测返回类型。

其他部分实际多态等和方法是一样

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值