這篇文章主要講解了“JDK8 Stream性能介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JDK8 Stream性能介紹”吧!
創新互聯建站是一家專業提供孫吳企業網站建設,專注與成都做網站、網站建設、外貿營銷網站建設、成都h5網站建設、小程序制作等業務。10年已為孫吳眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。
在編寫代碼時,想用jdk8的stream替換以前的for循環,代碼如下:
//for方法 Setkeys = Sets.newHashSetWithExpectedSize(list.size()); for (T data : list) { keys.add(getWrapredisKey(data)); } //stream方法 Set keys = list.stream().map(this::getWrapRedisKey).collect(Collectors.toSet());
stream
可以非常優雅的一行代碼就解決,而for
則需要三行代碼,生產力大大提高。
但是for
循環可以實現初始化容量,這在頻繁add
觸發rehash
、鏈表轉紅黑樹
時,能大大提高性能,那么stream
的api
的Collectors.toSet
方法有沒有設置初始化容量。
查看源碼:
Talking is cheap,show me the code
簡單寫了一個測試代碼
public static void main(String[] args) { int expectSize = 100000; Listsource = generateData(expectSize); long start = System.currentTimeMillis(); testFor(source); //testStream(source); System.out.println(System.currentTimeMillis() - start); } private static void testFor(List source) { Set sets = Sets.newHashSetWithExpectedSize(source.size()); for (String s : source) { sets.add(s); } } private static void testStream(List source) { source.stream().collect(Collectors.toSet()); } private static List generateData(int size) { List list = Lists.newArrayListWithCapacity(size); for(int i = 1; i <= size; i++) { list.add(UUIDUtils.generateId()); } return list; }
結果是10w數據是,for比stream快2-3倍...
在數據量比較大,同時要求相應時間場景下,應該還是使用for或者在使用stream前預設集合容量。
感謝各位的閱讀,以上就是“JDK8 Stream性能介紹”的內容了,經過本文的學習后,相信大家對JDK8 Stream性能介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!