Lambda表达式
来源:互联网 发布:origin图中点显示数据 编辑:程序博客网 时间:2024/05/16 19:52
Lambda表达式是JDK1.8的新特性,使用Lambda表达式可以极大的简化匿名内部类的书写,Lambda表达式最低可以兼容Android2.3系统,做过Android开发的人都知道,匿名内部类的使用太平常和频繁不过了,随随便便添加一个监听事件就会用到,开启个子线程也会用到,自定义一个回调接口也会用到.那么如果使用Lambda表达式将会带来哪些书写方面的简便呢?
它可以让你的匿名函数省去书写new关键字、匿名函数的类名、方法名、方法的权限修饰符、return关键字、甚至是参数的类型。仅仅是使用如下的表达式即可,有点类似ES6的匿名函数的使用.
//空参数不带返回值函数调用()->{}//空参数带返回值函数调用,返回值直接写在花括号内,函数体只有一条语句,{}也可以省略()->{...}//单参数函数调用,参数类型不用声明,单个参数可以省略()v->{...}//多参数函数调用,参数类型需要声明,括号不能省略(String str,int a)->{...}
在Android Studio中使用Lambda表达式需要配置下app目录下的build.gradle文件:
android { ... defaultConfig { ... jackOptions.enabled = true } compileOptions { sourceCompatibility org.gradle.api.JavaVersion.VERSION_1_8 targetCompatibility org.gradle.api.JavaVersion.VERSION_1_8 } ...}
下面分别举例演示下Lambda的使用语法,使用Lambda表达式有个前提条件,被简化书写的匿名内部类的父类或者其所实现的接口中只能有一个方法.
设置点击事件监听
//非Lambda表达式写法findViewById(R.id.btn_click).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "normal regist onClick", Toast.LENGTH_SHORT).show(); }});//Lambda表达式写法findViewById(R.id.btn_click1).setOnClickListener(v -> Toast.makeText(MainActivity.this, "Use Lambda to show view onClick",Toast.LENGTH_SHORT).show());
创建子线程
new Thread(()->{ //...doSomething}).start();
调用空参数方法
//接口public interface EmptyParamLambda { String print();}/** * 调用空参数方法 * @param lambda */private void CallEmptyParamLambda(EmptyParamLambda lambda) { String result = lambda.print(); Toast.makeText(MainActivity.this, result , Toast.LENGTH_SHORT).show();}//使用方式findViewById(R.id.btn_click2).setOnClickListener(v->{ CallEmptyParamLambda(()-> "empty method called");});
调用多参数方法
//接口public interface ParamsLambda { String print(String a,int b);}/** * 调用多参数方法 * @param lambda */private void CallParamsLambda(ParamsLambda lambda) { String result = lambda.print("hello lambda", 123); Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();}//使用方式findViewById(R.id.btn_click3).setOnClickListener(v->{ CallParamsLambda((String a,int b)-> "params method called result is:"+a+b);});
调用单参数方法
//接口public interface SingleParamLambda { void print(String str);}/** * 调用单参数方法 * @param lambda */private void CallSingleParamsLambda(SingleParamLambda lambda) { lambda.print("hello lambda");}//使用方式findViewById(R.id.btn_click4).setOnClickListener(v -> { CallSingleParamsLambda(value->{ Toast.makeText(MainActivity.this, value, Toast.LENGTH_SHORT).show(); });});
0 0
- Lambda Expressions(Lambda表达式)
- Lambda表达式
- Lambda表达式
- Lambda 表达式
- Lambda表达式
- lambda表达式
- lambda表达式
- Lambda表达式
- Lambda表达式
- Lambda表达式
- Lambda表达式
- Lambda 表达式
- Lambda表达式
- Lambda 表达式
- Lambda 表达式
- Lambda表达式
- Lambda表达式
- Lambda 表达式
- Unicode与UTF-8的关系
- AlarmManager-系统推荐的定时任务
- js判断web登录的是手机端还是pc端
- 网络协议(二)
- HashMap、HashTable、HashSet区别
- Lambda表达式
- Android Studio这样才能彻底删除项目
- offset和position的区别
- 微服务(Microservice)那点事
- 本地数据文件入库 sqlldr
- Android 4.0 Launcher2源码分析——Workspace滑动
- importscripts
- Maven构建项目速度太慢的解决办法,以及报错Retrieving archetypes:' has encountered a problem
- underscore在业务场景中的使用