JAVA8 Lambda 语法学习

在 Java 世界中,匿名内部类 可以实现在应用程序中可能只执行一次的操作。例如,在 Android点击事件中,可以用匿名内部类完成该操作:

Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
    }

});

代码虽然看起来不是很优雅,但是代码看起来好理解,可以直接在代码调用的地方知道点击该按钮会触发什么操作。

Lambda 表达式语法

Lambda 表达式通过把匿名内部类五行代码简化为一个语句。这样使代码看起来更加简洁。

一个 Lambda 表达式 由三个组成部分:

    参数列表           箭头符号       函数体
(int x, int y)        ->         x + y

    函数体可以是单个表达式,也可以是代码块。如果是单个表达式的话,函数体直接求值并返回了。如果是代码块的话,就和普通的函数一样执行

看下面几个表达式:
(int x, int y) -> x + y 
     两个整数型参数 x 和 y,表达式返回 x + y 的值
() -> 42 
     不带参数,直接返回42
(String s) -> { System.out.println(s)
    string 参数,使用代码块的方式把该参数打印出来,没有返回值

例子

Runnable看下面的例子:

 public void runnableTest() {
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello world one!");
            }
        };
        // Lambda Runnable
        Runnable r2 = () -> System.out.println("Hello world two!");

        // 执行两个 run 函数
        r1.run();
        r2.run();
    }

Lambda表达式将匿名内部类的5行代码转换为1行代码,更加简洁!

Comparator

Person类工具name进行排序

public class ComparatorTest {
    public static void main(String[] args) {
        List<Person> personList = Person.createShortList();

        // 使用内部类实现排序
        Collections.sort(personList, new Comparator<Person>() {
            public int compare(Person p1, Person p2) {
                return p1.getSurName().compareTo(p2.getSurName());
            }
        });

        // 使用 Lambda 表达式实现
        // 升序排列
        Collections.sort(personList, (Person p1, Person p2) -> p1.getSurName().compareTo(p2.getSurName()));

        // 降序排列
        Collections.sort(personList, (p1, p2) -> p2.getSurName().compareTo(p1.getSurName()));
    }
}

第二个 Lambda 表达式省略了该类型定义。Lambda 表达式支持类型推倒,如果通过上下文可以推倒出所需要的类型,就可以省略类型定义.

Lisenter

view.setOnClickListener( v -> Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show() )

以上就是对lambda表达式的简单学习,以后在项目中需要用到在做进一步 学习了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值