成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如果你使用了這個Stream流操作,升級Java17有可能會出問題

開發 后端
從 API 使用的角度來看,這不太正常。如果我調用一個方法,我肯定希望它能夠執行,即使它可能拋出一個異常,但是在這里卻什么也沒發生。

 [[419797]]

在Java 8 中,甚至到Java 16 中執行下面的Stream流操作

  1. Stream.of(1, 2, 3, 4) 
  2.           .skip(1) 
  3.           .limit(2) 
  4.           .peek(System.out::println) 
  5.           .count(); 

都會跳過元素1,打印元素2以及3,最終計數為2,我想大家對此應該都沒有異議。

但是從Java 17 開始,再次執行上面的代碼,跳過元素1,計數為2。等等…… 是不是少執行了點什么?

是的,不打印元素`2`和`3`了?

從 API 使用的角度來看,這不太正常。如果我調用一個方法,我肯定希望它能夠執行,即使它可能拋出一個異常,但是在這里卻什么也沒發生。

  1. 是的,不打印元素`2`和`3`了? 

This method exists mainly to support debugging, where you want to see the elements as they flow past a certain point in a pipeline。

這是對Stream的peek(Consumer)方法的一個說明,大意是:雖然我們可以在流中通過peek執行一些利用中間操作消費元素的方法,胖哥為此還寫過相關的文章。不過這個API的本意設計并不是為了改變Stream流中元素的中間態,而是為了Debug,為了讓你能夠觀察到管道中的元素途經的點:

  1. Stream.of("one""two""three""four"
  2.          .filter(e -> e.length() > 3) 
  3.           // 觀察正在被長度大于3規則過濾的元素 
  4.          .peek(e -> System.out.println("Filtered value: " + e)) 
  5.          .map(String::toUpperCase) 
  6.          // 觀察正在被轉大寫的元素 
  7.          .peek(e -> System.out.println("Mapped value: " + e)) 
  8.          .collect(Collectors.toList()); 

也就是說使用peek()改變Stream元素是在Debug中“副作用”的一個操作。

Stream流的大小在執行跳過操作skip(n)和限制長度操作limit(n)后,流的大小長度是已經預知的,為了獲得流的大小沒必要去遍歷流的元素,跳過了遍歷就不能再通過peek()觀察元素了。

允許流不執行對結果沒有任何作用的操作,例如排序一個已經排序的流。這個操作的結果是已知的,不需要迭代元素,也不會影響結果,所以不迭代。所以不具有觀察(peek)的價值。

我敢說會有大量的項目、甚至是優秀的開源項目會受到這個新機制的影響,胖哥也在項目中使用了圖片。所以如果你看到這篇文章而且使用peek()做了一些“副作用”操作,就需要評估升級Java17帶來的影響了。

消息來源

這一新機制是Java Champion、Jetbrains核心開發者塔吉爾·瓦列夫(Tagir Valeev)和Oracle Java 語言架構師Brian Goetz在一場技術討論中提及的。

Brian Goetz

那么JDK給的建議是什么

盡量不使用count(),甚至Stream.collect(Collectors.counting())也少用,如果你想改變元素,根據情況使用map操作或者foreach操作。如果你在20天后Java17發布后進行升級一定要注意這一點。不過說實話peek()用著挺爽的,這么改的話有點可惜了,不知道你對此有什么看法,歡迎留言討論。

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2023-08-17 14:42:54

Redis分布式鎖

2022-06-13 10:07:13

物聯網開發物聯網

2025-06-20 08:14:55

2021-09-08 22:29:46

Windows 11Windows微軟

2019-05-27 13:42:33

Python編程語言代碼

2022-05-06 17:33:10

元宇宙現實問題沉迷風險

2024-01-04 08:38:21

Vue3API慎用

2020-12-16 05:54:18

充電寶信息安全

2020-07-06 07:48:16

MySQL細節SQL

2021-09-09 11:24:09

微軟Windows 11Windows

2020-11-16 07:03:59

Python內置

2021-10-11 20:52:20

微軟Windows 11Windows

2018-05-10 11:50:13

Docker容器冷知識

2021-06-06 16:52:11

工具函數JS

2018-07-10 11:05:18

開發者技能命令

2018-07-10 10:45:00

規范Commit項目

2010-03-22 16:27:57

Windows安全殺毒軟件

2015-11-06 11:02:24

微信羅素生活

2010-06-21 10:34:03

職場信號被炒

2019-11-13 16:20:28

jQueryJavaScript前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九免费视频 | 久久久久久成人 | 欧美日韩亚洲一区 | 亚洲一区二区三区视频免费观看 | 自拍 亚洲 欧美 老师 丝袜 | 成人亚洲一区 | 欧美一级在线视频 | 91av视频在线观看 | 亚洲成人自拍 | 亚洲视频www| 久久高清 | 中文字幕在线第一页 | 国产av毛片| 自拍偷拍第1页 | 国产福利在线视频 | 日本精品视频 | 精品国产精品一区二区夜夜嗨 | 日韩久久久一区二区 | 一本一道久久a久久精品蜜桃 | 久久99精品久久久久久国产越南 | 亚洲精品日韩在线观看 | 久久精品国产一区二区三区不卡 | 成人在线观看免费 | 国产在线观看不卡一区二区三区 | 久久久www成人免费无遮挡大片 | 欧美日韩亚洲一区 | 久久免费精品视频 | 国产三级在线观看播放 | 成年人黄色小视频 | 一区二区三区亚洲 | 一区视频在线 | 秋霞av国产精品一区 | 久久中文高清 | 国产精品视频免费观看 | 国产亚洲成av人片在线观看桃 | www.玖玖玖 | 黑人精品欧美一区二区蜜桃 | 日韩一二区 | 成人在线精品视频 | 国产午夜精品视频 | 久久网一区二区三区 |