之前的實習的過程中,一位有着非常豐富經驗的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只能被“消費”一次,一旦遍歷過就會失效,就像容器的迭代器那樣,想要再次遍歷必須重新生成。