JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式
来源:互联网 发布:一剪梅网络翻唱 编辑:程序博客网 时间:2024/06/06 10:01
这些天看见另一本好书《给大忙人看的Java SE 8》,其中的新特性 StreamAPI 和 lambda表达式 是之前jdk没有提供的新特性,也是jdk8 重要的更新内容,我会总结一下它们的用法,更详细的参见书本。
- lambda表达式的概念
人对一个概念的理解是随着时间渐渐加深的,之前也见过lambda表达式,但那时候学起来完全摸不到头脑,这两天重新去看,终于有了一些概念,可以想象,过段时间会更加知道为什么会有lambda表达式,大牛们为什么会去设计这种函数式语言?
java里大家都知道匿名函数,下面是一个多线程的创建例子:
package JDK;/** * Created by panqian on 2017/2/20. */public class Lambda_1 { public static void main(String[] args) { //传统创建线程 new Thread(new Runnable() { @Override public void run() { System.out.println("传统创建线程"); } }).start(); //使用lambda表达式 new Thread(()->{ System.out.println("lambda表达式"); }).start(); }}
同样是传入Runnable实现类,lambda表达式的写法比传统的更加简洁。再看一个集合排序
List<Integer> list = new ArrayList<>(); list.add(3); list.add(1); list.add(2); System.out.println("排序前: " + list.toString()); Collections.sort(list, (Integer x, Integer y) -> { return x > y ? 1 : -1; }); System.out.println("排序后: " + list.toString());
可以看出 lambda表达式由 参数((Integer x, Integer y)),剪头(->),代码块({
return x > y ? 1 : -1; })组成。 lambda表达式很大的一个使用场景就是替代java的内部类,做到代码简洁,易读。
2.方法引用
对于上面的代码还不是最简洁的,如果在lambda表达式中引用别的方法,可以拿lambda表达式里面的方法引用:
拿前面集合排序的例子继续简化:
List<Integer> list1 = new ArrayList<>();list1.add(3);list1.add(1);list1.add(2);System.out.println("排序前: " + list1.toString());//::前面是类,后面是方法,压缩到只有一句,等同于 //// (Integer x, Integer y) -> {// return Integer.compare(x,y);// }list1.sort(Integer::compare);System.out.println("排序前: " + list1.toString());
可以看出它由
对象::实例方法类::静态方法
格式组成
Integer::compare这个表达式没有参数,它会根据上下文自动判断应该传入什么参数,达到排序的目的。
未完待续
0 0
- JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式
- JAVA 8 StreamAPI 和 lambda表达式 总结(二)--Stream基本操作
- JAVA 8 StreamAPI 和 lambda表达式 总结(三)--Optional类型
- JAVA 8 StreamAPI 和 lambda表达式 总结(四)--stream的一些聚合操作
- Java8特性详解 lambda表达式和StreamAPI
- Java 8 Lambda 表达式(一)
- java 8(一)--Lambda表达式
- JAVA 8入门(一)Lambda表达式
- lambda表达式(一)
- Java 8 lambda表达式
- Java 8 Lambda表达式
- Java 8 lambda表达式
- Java 8 Lambda 表达式
- Java 8 Lambda表达式
- Java 8 Lambda 表达式
- Java 8 Lambda表达式
- Java 8 Lambda 表达式
- Java 8 Lambda 表达式
- 分布式与集群的区别与联系
- Android热门第三方库
- /etc/oraInst.loc文件的位置
- 后缀数组(不小于k个字符串中的最长子串)
- 【BZOJ 4034】【HAOI 2015】树上操作
- JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式
- 对前面信息管理系统的完善
- 【iOS技术文章】iOS Label的几种样式
- 蓝桥杯 算法提高 选择排序
- 哈希表及其实现
- Mac下MonoDeveloper快捷键
- 关于Mac安装MySQL和MySQLWorkbench的初始密码,环境配置问题总结
- JavaSE 学习参考:数组遍历
- POJ 3430 Pizza schedule 可能会