美文网首页
2018-03-13 高效开发:当Android中武装上Lamb

2018-03-13 高效开发:当Android中武装上Lamb

作者: 心灵屋宿客 | 来源:发表于2018-03-13 21:03 被阅读0次

    Android中如何使用Lambda表达式高效开发

    简介
    虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。

    Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块。

    Lambda表达式的写法,不会去关心这个类以及方法,只会关心这个方法内的代码,所以其他的多余代码就显得多余了。那么,到底具体如何使用呢?

    Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。

    环境准备
    如果还没有安装Java 8,那么你应该先安装才能使用lambda和stream(译者建议在虚拟机中安装,测试使用)。 像NetBeans 和IntelliJ IDEA 一类的工具和IDE就支持Java 8特性,包括lambda表达式,可重复的注解,紧凑的概要文件和其他特性。

    一.在build.gradle中加入如下配置

     jackOptions{
                enabled true
            }
    compileOptions{
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
     }
    

    [图片上传失败...(image-cdd97c-1520946048122)]

    二.使用lambda表达式的三种写法

    1.第一种方式,无参数+语句(代码块):适用于匿名内部类中方法无参数的情况
        /**
         * 第一种方式,无参数+语句(代码块):适用于匿名内部类中方法无参数的情况
         * () -> 语句
         * 或
         * () -> {代码块}
         **/
        private void threadTest() {
            /**普通写法**/
            new Thread(new Runnable() {
                @Override
                public void run() {
    
                }
            }).start();
            /**使用lambda表达式写法**/
            new Thread(() -> Log.d(TAG, "this is a lambda Thread")).start();
        }
    
    2.第二种方式,有参数+语句:适用于匿名内部类中方法只有一个参数的情况
        /**
         * 第二种方式,有参数+语句:适用于匿名内部类中方法只有一个参数的情况
         * 方法参数 -> 语句
         * 或
         * 方法参数 -> {代码块}
         */
        private void setOnClick() {
            /**普通写法**/
            findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d(TAG, "this is a general onClick");
                }
            });
            /**使用lambda表达式写法**/
            findViewById(R.id.button).setOnClickListener(v -> Log.d(TAG, "this is a lambda onClick"));
        }
    
    第三种方式,有参数+代码块:适用于匿名内部类中方法不止一个参数的情况
        /**
         * 第三种方式,有参数+代码块:适用于匿名内部类中方法不止一个参数的情况
         * (参数1, 参数2) -> 语句
         * 或
         * (参数1, 参数2) -> {代码块}
         */
        private void setOnChecked() {
            CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
            /**普通写法**/
            checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    Log.d(TAG, "this is a general onCheckedChanged");
                }
            });
            /**使用lambda表达式写法**/
            checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
                Log.d(TAG, "this is a lambda onCheckedChanged");
                Log.d(TAG, "this is a lambda onCheckedChanged_isChecked=" + isChecked);
            });
        }
    

    相关文章

      网友评论

          本文标题:2018-03-13 高效开发:当Android中武装上Lamb

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