原創:花括號MC(微信公衆號:huakuohao-mc)。關注JAVA基礎編程及大數據,注重經驗分享及我的成長。java
雖然如今Oacle
官方發佈的最新JDK
版本已經到了JDK14
。但我相信不少團隊的生產系統上仍是JDK8
,甚至有的團隊仍是JDK7
或者JDK6
。即使不少團隊已經將生產環境升級爲JDK8
,可是代碼卻仍是老代碼,也就是說根本沒有使用JDK8
提供的新特性。程序員
JDK8
給程序員來帶了不少便利,甚至可讓Java
程序員跟Python
,Ruby
等程序員撕逼的時候,也可以揚眉吐氣一把;由於JDK8
終於開始支持「行爲參數化了」,也就是你們常常說的,能夠把一個函數看成參數傳給另外一個函數。數據庫
JDK8
最明顯的兩個變化就是開始支持Lambda
表達式,以及集合的Stream
流式處理。這兩個特性均可以讓咱們寫的代碼更優雅,也能讓咱們在實現某些功能的時候更輕鬆,特別是Stream
,那簡直是超級好用,性價比超級高,花上20分鐘去學習一下,就能讓你的代碼質量提高一個檔次。編程
下面我列舉幾個簡單的小場景,讓各位感覺一下Java8
提供的Stream
API是多麼的方便優雅,也算是拋磚引玉了。微信
平常編碼的時候用的最多的應該就是集合了。好比從數據庫裏查詢出一天賣出去多少本書,通常咱們會這樣寫,List<Book> books = query.find(date);
而後針對這個集合會作各類各樣的操做來知足產品層面的需求。運維
JDK8以前編輯器
//打印出每本書的詳情
for (Book book : books){
System.out.println(book.toString());
}
複製代碼
使用Stream以後ide
//打印每本書詳情
books.stream().forEach(System.out::print);
複製代碼
JDK8以前函數
List<Book> highPriceBooks = new ArrayList<>();
for (Book book : books){
if (book.getPrice()>20){
highPriceBooks.add(book);
}
}
複製代碼
使用Stream以後學習
highPriceBooks = books.stream().filter(book -> book.getPrice()>20).collect(Collectors.toList());
複製代碼
JDK8以前
List<Book> sortBooks = new ArrayList<>();
for (Book book : books){
Collections.sort(books, new Comparator<Book>() {
@Override
public int compare(Book o1, Book o2) {
if (o1.getPrice() > o2.getPrice()){
return 1;
}else if (o1.getPrice() < o2.getPrice()){
return -1;
}else {
return 0;
}
}
});
}
複製代碼
使用Stream以後
sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice)).collect(Collectors.toList());
複製代碼
若是你喜歡能夠直接經過reversed()
反轉,像這樣
sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice).reversed()).collect(Collectors.toList());
複製代碼
JDK8以前
List<String> bookNames = new ArrayList<>();
for (Book book : books){
bookNames.add(book.getName());
}
複製代碼
使用Stream以後
bookNames = books.stream().map(Book::getName).collect(Collectors.toList());
複製代碼
JDK8以前
//計算一天當中賣出的全部書的價格總和。
int totalNum = 0;
for (Book book : books){
totalNum += book.getPrice();
}
複製代碼
使用Stream以後
totalNum = books.stream().map(Book::getPrice).reduce(0,(a,b)->a+b);
複製代碼
你覺得JDK8
的Stream
就這麼點本事嗎?它還能夠完成鏈式處理,像這樣
//選出價格高於20的兩個元素。
books.stream().filter(book -> book.getPrice()> 20).limit(2).collect(Collectors.toList());
複製代碼
此外若是你想利用你多核的CPU並行處理集合以提升計算速度,在JDK8
中只須要簡單的調用一下parallelStream
方法。就像這樣books.parallelStream().forEach(book -> book.toString());
JDK自動幫你並行處理,厲不厲害。
好了,就寫這麼多了,更多的使用技巧還得你本身去挖掘體會,我要去擼代碼了,拜拜! 記住一句話,Java8
提供的那些新東西,值得你花更多的精力去學習研究。
推薦閱讀:
·END·
Java·大數據·我的成長