亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Stream.ofNullable 處理可空列表是不好的做法嗎

使用 Stream.ofNullable 處理可空列表是不好的做法嗎

精慕HU 2023-06-04 11:16:48
this?using optionals correctly 中的第 12 項不是可選文章狀態有時,我們傾向于&ldquo;過度使用&rdquo;東西。這意味著我們有一個東西,比如 Optional,我們到處都能看到它的用例。在 Optional 的情況下,一個常見的場景涉及鏈接其方法以獲得值的單一目的。避免這種做法并依賴簡單明了的代碼。也是一樣嗎Stream.ofNullable?我應該避免這種情況嗎:Stream.ofNullable(getHandlers(...))? ?.flatMap(Collections::stream)? ?.forEach(handler -> handler.handle(event));贊成這個?List<Handler> handlers = getHandlers(...)?if (handlers == null) {? ? return; // do nothing}handlers.forEach(handler -> handler.handle(event));
查看完整描述

1 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

我認為“依靠簡單明了的代碼”的建議在任何地方都是很好的建議,不限于 eitherOptionalStream.ofNullable.

就題中的具體選擇而言:我覺得很難說一個客觀上比另一個更簡單直白。Stream.ofNullable更簡潔,但需要您知道它的作用;顯式檢查更冗長,但如果您不熟悉s,if可能更容易理解。Stream

當向 API 引入新方法時,可以說它在某種意義上“更難”,因為不熟悉 API 方法的人會發現它更難閱讀,因為他們不知道該方法的作用。當然,人們可以反駁說他們應該知道,或者應該預料到會遇到他們不知道的事情。

所以,我基本上是說你應該使用你/你的代碼的讀者會覺得最舒服的那個。


但是,我認為這里不好的做法是getHandlers(...)首先返回 null 。Effective Java中有一項(第 3 版第 54 項,第 2 版第 43 項)關于總是返回一個空列表而不是 null。

此建議在這里非常有效,因為您處理空列表的方式與處理空列表的方式相同。

這樣做可以讓你寫:

List<Handler> handlers = getHandlers(...);
handlers.stream().forEach(...);

這是客觀上更簡單的代碼。

我認為使用它會更好:

for (Handler h : getHandlers(...)) {
  // ...
  }

因為您可以更靈活地在循環內做更多事情(例如中斷),而無需使用流(/類似流的方法)。


查看完整回答
反對 回復 2023-06-04
  • 1 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號