Java 8新特性 Lambde表达式介绍-使用
来源:互联网 发布:网络机顶盒怎么看直播 编辑:程序博客网 时间:2024/05/21 13:58
Lambde表达式干什么用的?
一种简写的格式, 类似于for循环和增强for循环关系,最直观的好处简写代码,以前要占四五行代码,现在可能只需要用一行代码就搞定了
ArrayList<String> list = new ArrayList<>(); //普通for 循环 for (int index = 0; index < list.size(); index++) { ...... } //增强for 循环 for (String string : list) { ...... }
下面是示例代码 和详细解析
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //示例代码1:重写的方法不带参数 new Thread(new Runnable() { @Override public void run() { Log.i(TAG, "run: "); } }); new Thread(() -> Log.i(TAG, "onCreate: ")); new Thread(() -> {Log.i(TAG, "onCreate: ");}); //示例代码2:重写的方法带一个参数 Button button = new Button(this); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "onClick: "); } }); button.setOnClickListener(v -> Log.i(TAG, "onCreate: ")); button.setOnClickListener((v) -> {Log.i(TAG, "onCreate: ");}); button.setOnClickListener((View v) -> {Log.i(TAG, "onCreate: ");}); //示例代码三:重写的方法带多个参数,并带有返回值 File file = new File(""); file.list(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { return filename.endsWith(".png"); } }); file.list((dir, filename) -> filename.endsWith(".png")); file.list((File dir, String filename) -> {return filename.endsWith(".png");}); file.list((File dir, String filename) -> { Log.i(TAG, "onCreate: "); return filename.endsWith(".png"); }); }
Lambde表达式分两部内容: “->”的左侧和右侧
如下图:
“->”左边表达式,相当于重写方法里面的参数,有三种情况:
- 重写的方法没有参数时,用()表示;上面的实例代码1
- 有一个参数时,表示方式有下面三种:上面的实例代码2
- v :变量名;可以是任意自定义的,当然最好和类型、具体参数意义相关
- (v):括号包裹变量名;
- (View v):括号里面数据类型加上变量名
- 重写的方法里面有多个参数,表示方式:上面的实例代码3
- (dir, filename):括号包裹变量名,变量名可任意自定义,各个变量之间有逗号隔开
- (File dir, String filename):在上面的基础上给变量加上数据类型
“->”右边表达式,相当于自己重写方法里面的具体内容,有两种情况:
- 重写的方法表达式只有一句话时,分两种情况:
- 返回值为void:示例代码1
- Log.i(TAG, “onCreate: “):直接写上这句话,并省略分号;
- {Log.i(TAG, “onCreate: “);}:用大括号包裹,并且有语句结束符号分号
- 返回值为非void:示例代码3
- filename.endsWith(“.png”):直接写上这句话,并省略分号;
- {return filename.endsWith(“.png”);}:用大括号包裹,并且有语句结束符号分号,语句前面必须加上return关键字;
- 返回值为void:示例代码1
- 重写的方法表示式有多句话时:示例代码3
- {Log.i(TAG, “onCreate: “);return filename.endsWith(“.png”);}:大括号包裹多条语句,每句话都必须有结束符号分号;如果返回值类型为非void,必须有return结束语句;如果返回值为void,可以省略return 语句;
PS: Lambde表达式只支持重写一个方法的, 如果你重写的方法有多个, 不好意思, 不支持
问题来了,既然这么多表示方式,到底用那种呢?
快捷键提示就知道了, 应该是最简洁的: 如果左侧只有一个参数, 那么就可以省略小括号和参数类型; 如果右侧只有一句话, 就可以省略大括号和分号
Android Studio提示快捷键: 快捷键Ctrl + Shift + 空格
在Android Studio上面用法:
问题是Android Studio 2.1版本以前不支持Lambde表达式,解决办法:传送门 gradle-retrolambda
0 0
- Java 8新特性 Lambde表达式介绍-使用
- Android Studio使用gradle-retrolambda支持Java8 新特性 Lambde表达式
- Java最近版本新特性使用介绍
- Java 8 新特性之 Lambda 表达式
- Java 8新特性:lambda表达式
- Java 8 新特性 Lambda表达式
- Java 8 新特性:Lambda 表达式
- Java JDK1.8新特性Lambda 表达式
- Java 8 新特性之 Lambda表达式
- W3Cschool Java 8新特性----> Lambda 表达式
- Java 8新特性:lambda表达式
- QT/C++ Lambde表达式
- JAVA 新特性:lambda表达式
- Java新特性 lambda表达式
- 在AndroidStudio中设置某项目支持使用Java 8 新特性 ( eg:Lambda 表达式)
- Android 使用jdk1.8新特性之lambda表达式
- Java 8新特性:lambda表达式(四)转载总结
- java 8 新特性(2.Lambda表达式)
- oracle数据字典
- intent的用法
- GUID 按引用传递
- Mac系统下, hadoop 2.6.2 完全分布式 配置
- 【Java】static关键字
- Java 8新特性 Lambde表达式介绍-使用
- 我的Android开发人生第一步
- "monitor" command not supported by this target.
- 【代码】Python冒泡排序的实现
- Java学习之文件传输基础---Java IO流
- Linux下解决no jdk found问题
- 全概率公式与贝叶斯公式
- 安装linux系统过程中值得记录的内容
- 定时器和延迟