一 概述
Lambda表达式是Java 8的一个新特性,可以替代只有一个函数的接口实现,告别匿名内部类,代码看起来更简洁易懂。
Lambda表达式同时还提升了对集合的迭代、遍历、过滤数据的操作。
那么在Android Studio中如何使用lambda表达式呢?
二 配置
在Android Studio中使用Lambda需要进行适当的配置
2.1 安装JDK1.8
安装后,打开CMD输入“java -version”查看当前JDK版本
2.2 在app下的build.gradle中使用Java1.8
1 2 3 4 5
| compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
|
三 使用
3.1 第一个lambda表达式
比如按钮的点击事件:
一般写法(匿名内部类):
1 2 3 4 5 6 7
| findViewById(R.id.btn_click).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(MainActivity.this, LambdaExampleActivity.class); startActivity(intent); } });
|
缺点:
- 可读性差,不能直接明了的体现我们的意图。
- 啰嗦,一行逻辑代码却有几行模板代码。
lambda表达式:
1 2 3 4 5
| findViewById(R.id.btn_click).setOnClickListener(view-> { Intent intent=new Intent(this, LambdaExampleActivity.class); startActivity(intent); });
|
优点:
- 参数的类型可省略
- Java编译器根据表达式的上下文推导出参数的类型
3.2 lambda表达式的结构
- 参数可以是零个或多个
- 参数类型可指定,可省略(根据表达式上下文推断)
- 参数包含在圆括号中,用逗号分隔
- 表达式主体可以是零条或多条语句,包含在花括号中
- 表达式主体只有一条语句时,花括号可省略
- 表达式主体有一条以上语句时,表达式的返回类型与代码块的返回类型一致
- 表达式只有一条语句时,表达式的返回类型与该语句的返回类型一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| //零个 Runnable runnable = () -> System.out.println("no argument"); //一个 IntToDoubleFunction intToDoubleFunction = (int x) -> x + 1; //两个 IntBinaryOperator intBinaryOperator = (int x, int y) -> x + y; //省略参数类型 View.OnClickListener oneArgument = view-> Log.d("TAG","one argument"); //指定参数类型 View.OnClickListener oneArgument1 = (View view)->Log.d("TAG","one argument"); //多行语句 //返回类型是代码块返回的void View.OnClickListener multiLine = (View view)->{ Log.d("TAG","multi statements"); Log.d("TAG","second line"); };
|
四 参考
参考Demo