Android使用Lambda表达式

做Android开发的都知道,Android代码毋庸置疑是代码比较大,甚至有的地方表达是冗余的。那么Lambda前来报道,给你的代码量减减负,让你的代码看起来更加简洁,给你蓬乱的长发理个板寸。

什么是Lambda表达式?

A lambda expression is a block of code with parameters(Lambda表达式是一个带有参数的表达式)。
Lambda表达式我们叫做函数式接口(functional interface),它有且仅有一个抽象方法的接口(即一个待实现的方法),也可以理解为替换匿名内部类的一种写法。

先看看简单使用效果
Android使用Lambda表达式_第1张图片
giphy.gif

引入方式

  1. 打开 File->Preferences,搜索closure 把它钩上


    Android使用Lambda表达式_第2张图片
    image.png
  2. 打开Project Structure,选择使用java8


    Android使用Lambda表达式_第3张图片
    image.png
  3. gradle添加配置,Android 终于有了自己的 Java 编译器。Android7.0(API24)在对JAVA8的支持上,需要使用新的编译器。


    Android使用Lambda表达式_第4张图片
    image.png

另:Github上已经有开发者设计了兼容lambda表达式到Java7,6,5的开源库retrolamda。

Lambda表达式解析

        btnClick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("TAG","lambda");
            }
        });

真正有用的代码只有toast这一行,却要占用6行代码来实现,不得不说确实代码冗余了。使用lambda表达式表示:btnClick.setOnClickListener(v -> Log.d("TAG","lambda");

lambda表达式通用格式:(args)->{body},则lambda表达式由三部分组成:
  1. (arg1,arg2...) 参数部分
  2. -> goes to符号
  3. {} 方法代码块
lambda表达式特征:
  • 参数可以零个或多个
  • 参数类型可指定或省略(Java编译器根据表达式的上下文推导出参数的类型)
  • 表达式主体只有一条语句时,花括号可省略

使用场景:

  • 无参数

()->body

        new Thread(new Runnable() {
            @Override
            public void run() {
                Log.d("TAG","lambda");
            }
        }).start();

使用lambda后,因为{}内只有一条语句,则省略{}花括号

new Thread(() -> Log.d("TAG","lambda")).start();
  • 一个参数

(x)->body

        btnClick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("TAG","lambda");
            }
        });

使用lambda后

btnClick.setOnClickListener(v -> Log.d("TAG","lambda"));
  • 多个参数
        //定义比较器进行排序
        List names = Arrays.asList("lilei", "hanmeimei", "tom", "jack");
        Collections.sort(names, new Comparator() {
            @Override
            public int compare(String a, String b) {
                return b.compareTo(a);
            }
        });

使用lambda后,自动缺省参数类型和花括号

        List names = Arrays.asList("lilei", "hanmeimei", "tom", "jack");
        Collections.sort(names, (a, b) -> b.compareTo(a));

今天的节目到这里就暂时结束了。关于Lambda的使用结合Rxjava功能更加强大,能让开发者保持简洁的写法和清晰的逻辑,释放更多精力到完成业务当中去。

你可能感兴趣的:(Android使用Lambda表达式)