Android使用Lambda表达式

作者: 奔跑吧李博 | 来源:发表于2017-12-27 15:36 被阅读156次

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

    什么是Lambda表达式?

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

    先看看简单使用效果
    giphy.gif

    引入方式

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


      image.png
    2. 打开Project Structure,选择使用java8


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


      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<String> names = Arrays.asList("lilei", "hanmeimei", "tom", "jack");
            Collections.sort(names, new Comparator<String>() {
                @Override
                public int compare(String a, String b) {
                    return b.compareTo(a);
                }
            });
    

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

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

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

    相关文章

      网友评论

      本文标题:Android使用Lambda表达式

      本文链接:https://www.haomeiwen.com/subject/wryvixtx.html