我正在尋找一種更方便的方法來校驗可選值的相等性。檢查選項的平等的便捷方式
這是一個Oracle Blog post暗示什麼:在一些
Optional<USB> maybeUSB = ...; maybeUSB.filter(usb -> "3.0".equals(usb.getVersion())
.ifPresent(() -> System.out.println("ok"));
恕我直言,結果像
if (maybeUSB.filter(c -> "3.0".equals(c.getVersion())).isPresent()) {
...
}
當然,這是怎樣的一個壞榜樣的,因爲它比較版本和USB本身不是實例但我認爲它應該仍然證明我的觀點。
這是真的,因爲它得到好處呢?
沒有
boolean presentAndEquals(Object)
或
boolean deepEquals(Object)
我在這裏失去了一些東西?
編輯:
我不是Optionals.equals那快樂的要麼。 我是否真的必須首先裝入一個對象才能立即取消裝箱並檢查相等性?
不要過早優化。你要麼必須裝箱(你不知道費用),要麼測試'isPresent()'(你也不知道這個費用)。 'maybeFoo.equals(Optional.of(...))'是可讀的,所以使用它。 – slim
我同意過早優化,但它更多的是關於代碼高爾夫比時間..談論Java權利;) –
「我不高興」沒有什麼特別的'可選':它只是一個容器供參考。你會期望另一個碰巧包含'String'的類爲'new Frobnitz(「some string」)。equals(「some string」)'返回true嗎?簡潔有用的情況超過了明顯不正確的情況。 –