之前的实习的过程中,一位有着非常丰富经验的CTO曾对我说过,代码的质量,要不断的去提升。从刚开始的CRUD,到具体的业务流程实现,在这个过程中要不断的提炼代码。把一些冗余的代码,变得精炼,精炼,再精炼。
我虽然理解他的意思,但是,还不是很明白使用何种方式,达到这种效果。
最近也面试了许多家,他们常会以这样的一个问题来问我。
Q1:你常使用的jdk版本是多少?
1.8
Q2:你知道jdk8 的新特性吗?
??????我蒙了,这玩意还有这操作,有什么用?
但是当我了解完后我才知道,原来这就是代码提炼的实现方式之一。废话过多了,正文走起~~~
==============================================
JDK简介
参考博客地址https://www.cnblogs.com/linuxws/p/10029875.html
java版本特性
我这里主要分析1.8,把我日常工作中接触到的说明一下,后续在补充
Stream API
- 模拟效果图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426100755510.png
我们在现实的工作中是否会常常遇到这样的需求:把一个用户集合中所有的用户身份id,放入另一个集合中。
使用java8的特性即可实现。
List<String> idcards= users.stream().map(User::getIdcard).collect(Collectors.toList())
反观我们日常方法
List<String> idcards=new ArrayList<String>();//定义一个集合来装身份证号码
for(int i=0;i<users.size();i++){
idcards.add(users.get(i).getIdcard());
}
- 参数说明:
users:一个实体类的集合,类型为List<User>
User:实体类
getIdcard:实体类中的get方法,为获取User的idcard
实现了代码的高度提炼。
stream()优点
-
无存储
- stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。
- 为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。
-
惰式执行。
- stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
-
可消费性。
- stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。
更多Stream API的实战案例–目录(详情点击这里)
- 把一个List<对象> 从中取出特定的一些内容,返回一个新的list
- List User[id,nm] => List id
- 把一个List<对象> 从中取出特定的一些内容, 并按照一定规则选取,返回一个新的list
- 把一个List<对象> 从中取出特定的一些内容, 并按照一定规则选取,并赋值,返回一个新的list
- 把一个List<对象> 从中取出特定的一些内容, 并按照一定规则选取,并赋值,返回一个Map