AS中引入Lambda表达式

来源:互联网 发布:传说之下 知乎 编辑:程序博客网 时间:2024/05/17 01:14

前言

最近项目中考虑使用Rxjava进行项目重构,而jdk1.8中新增的核心特性中的lambda表达式与其结合起来很完美,所以写了这篇文章,简单的介绍下AS中如何使用Lambda表达式.

lambda表达式取代了匿名内部类,取消了模板,允许用函数式风格编写代码,使代码可读性更高,也更简洁,详细介绍请参考
java8 简明介绍

如何在AS中配置lambda?

(1)引入retrolambda插件

这里写图片描述

(2)应用插件retrolambda

这里写图片描述

(3)从 maven central 获取最新版本插件
(4)指定java版本8
这里写图片描述

至此配置完成,下一步就可以在AS中使用了。

1.用lambda表达式实现OnClickListener

 Button button = (Button) findViewById(R.id.bt_test1);        button.setOnClickListener(new  View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this, "hello eooooo", Toast.LENGTH_SHORT).show();            }        });

转化为如下的写法:

        button.setOnClickListener(v -> Toast.makeText(MainActivity.this, "hello eooooo", Toast.LENGTH_SHORT).show());

2.用lambda表达式实现Runnable

new Thread(new Runnable() {            @Override            public void run() {                Log.e("aaa","bbbbb");            }        }).start();

转变为

new Thread(()->Log.e("aaa","bbbbb")).start();

3.Java 8 允许你通过::关键字获取方法或者构造函数的的引用。

public class Person {    private String name;    private int age;    public Person(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}
public interface PersonFactory <P extends Person> {    P create(String firstName, int age);}
private void test3(){        PersonFactory<Person> personFactory = Person::new;        Person person = personFactory.create("tom",15);        Log.e("person:",person.getName()+"::"+person.getAge());    }

我们通过Person::new来创建一个Person类构造函数的引用。Java编译器会自动地选择合适的构造函数来匹配PersonFactory.create函数的签名,并选择正确的构造函数形式。


更多用法可以查看

Java8 lambda表达式10个示例

gradle-retrolambda官网

0 0
原创粉丝点击