非原創(chuàng)侣监,知識總結(jié)性文章
用于集合上批量數(shù)據(jù)操作的 Java Stream API
java.util.stream是 Java 8中添加的新程序包腺律,以便對集合執(zhí)行類似過濾/映射/歸約的操作欲账。Stream API 將允許順序執(zhí)行和并行執(zhí)顷牌,是最好的功能之一湘今,如果經(jīng)常處理Collections,而且集合元素很多唉窃,我們可以根據(jù)某些條件過濾掉它們耙饰。
Collection接口已使用 stream()和 parallelStream()默認方法進行了擴展,以獲取用于順序執(zhí)行和并行執(zhí)行的 Stream句携。讓我們用一個簡單的例子看看它們的用法榔幸。
package com.taotao.springboot;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class StreamList {
public static void main(String[] args) {
List<Integer> myList = new ArrayList<>();
for (int i = 0; i < 100; i++) myList.add(i);
//串行流
Stream<Integer> sequentialStream = myList.stream();
//并行流
Stream<Integer> parallelStream = myList.parallelStream();
//過濾
Stream<Integer> highNums = parallelStream.filter(p -> p > 90);
//使用 forEach 遍歷
highNums.forEach(p -> System.out.println("High Nums parallel=" + p));
Stream<Integer> highNumsSeq = sequentialStream.filter(p -> p > 90);
highNumsSeq.forEach(p -> System.out.println("High Nums sequential=" + p));
}
}
運行上述代碼的 main 方法允乐,你將看到如下輸出:
High Nums parallel=91
High Nums parallel=93
High Nums parallel=96
High Nums parallel=94
High Nums parallel=95
High Nums parallel=92
High Nums parallel=97
High Nums parallel=98
High Nums parallel=99
High Nums sequential=91
High Nums sequential=92
High Nums sequential=93
High Nums sequential=94
High Nums sequential=95
High Nums sequential=96
High Nums sequential=97
High Nums sequential=98
High Nums sequential=99
請注意矮嫉,并行流不按集合元素排列順序處理,但在處理大量元素的集合時將非常有用牍疏。
新的時間 API
在 Java中 使用日期蠢笋,時間和時區(qū)一直很困難。Java中沒有用于日期和時間的標準方法或API鳞陨。java.time程序包是 Java 8一個不錯的附加功能昨寞,它將簡化Java中使用時間的過程瞻惋。
僅查看 Java Time API軟件包,我就可以感覺到它非常易于使用援岩。它具有一些子包java.time.format歼狼,這些子包提供用于打印和解析日期和時間的類,并java.time.zone提供對時區(qū)及其規(guī)則的支持享怀。
新的Time API在整月的幾個月和一周中的幾天中都更喜歡枚舉而不是整數(shù)常量羽峰。將DateTime對象轉(zhuǎn)換為字符串的類是DateTimeFormatter。
集合API的改進
我們已經(jīng)看到了 forEach()方法和用于集合的 Stream API添瓷。Collection API還有一些新方法是:
Iterator:forEachRemaining(Consumer action)在所有元素都已處理完畢或該動作引發(fā)異常之前梅屉,對每個剩余元素執(zhí)行給定操作的默認方法。
Collection:removeIf(Predicate filter)刪除此集合中所有滿足特定條件的元素的默認方法鳞贷。
Collection:spliterator() 該方法返回Spliterator實例坯汤,該實例可用于順序或并行遍歷元素。
map:replaceAll()搀愧,compute()惰聂,merge()方法。
具有鍵沖突的HashMap類的性能改進
并發(fā) API 的改進
一些重要的并發(fā)API增強功能包括:
ConcurrentHashMap: compute()咱筛,forEach()庶近,forEachEntry(),forEachKey()眷蚓,forEachValue()鼻种,merge(),reduce()和search()方法沙热。
CompletableFuture:可以明確完成(設(shè)置其值和狀態(tài))叉钥。
Executors、newWorkStealingPool():使用所有可用處理器作為目標并行度級別創(chuàng)建竊取線程池的方法篙贸。
Java IO改進
一些IO改進包括:
Files.list(Path dir) 返回延遲填充的Stream投队,其元素是目錄中的條目。
Files.lines(Path path) 從文件中讀取所有行作為流爵川。
Files.find() 通過在以給定起始文件為根的文件樹中搜索文件敷鸦,返回通過路徑延遲填充的Stream。
BufferedReader.lines() 返回一個Stream寝贡,其元素是從此BufferedReader中讀取的行扒披。
其他核心API改進
一些其他API改進:
- ThreadLocal 靜態(tài)方法可以使用 withInitial(Supplier supplier) 輕松創(chuàng)建實例。
- Comparator 接口已擴展了許多默認和靜態(tài)方法圃泡,用于自然排序碟案,反向排序等。
- Integer颇蜡,Long 和 Double 包裝器類中的 min()价说,max()和sum()方法辆亏。
- 布爾類中的 logicalAnd(),logicalOr()和 logicalXor()方法鳖目。
- ZipFile.stream()方法獲取ZIP文件條目上的有序 Stream扮叨。條目以在 ZIP 文件的中央目錄中出現(xiàn)的順序出現(xiàn)在 Stream 中。
- Math類中的幾種實用方法领迈。
- jjs 添加命令以調(diào)用 Nashorn Engine甫匹。
- jdeps 添加命令以分析類文件
- JDBC-ODBC 橋已被刪除。
- PermGen 內(nèi)存空間已被刪除