Saya memiliki kode pencarian berikut di Java:
return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();
Saya ingin menemukan kolom dengan nama dan mengembalikan yang pertama ditemukan.
Saya mengerti ada kasus ketika tidak ada yang ditemukan dan harus diproses, tapi bagaimana caranya?
Apakah ini yang diinginkan dengan sumpah ini:
'Optional.get()' without 'isPresent()' check
?
Bagaimana cara memperbaiki? Saya ingin kembali null
jika tidak ditemukan.
MEMPERBARUI
Oke, oke, saya hanya tidak menyadari, itu findFirst()
kembali Optional
.
java
java-8
java-stream
optional
Redup
sumber
sumber
$
sebagai pengenal di Java: JLS Sec 3.8 : "Tanda $ harus digunakan hanya dalam kode sumber yang dibuat secara mekanis atau, jarang, untuk mengakses nama yang sudah ada sebelumnya di sistem lama."Jawaban:
Ganti
get()
denganorElse(null)
.sumber
orElse
dimulai dengan "atau"?else
merupakan kata kunci.orElse
bukanget
karenaget
akan memunculkan pengecualian jika nilainya null.orElseGet()
membutuhkan aSupplier<T>
, sedangkanorElse()
membutuhkanT
. Ini tidak setara.orElse
; tidak ada referensiorElseGet
dalam komentarnya;)...findFirst().orElse(null);
Mengembalikan nilai jika ada, jika tidak mengembalikan
null
. Dokumentasi mengatakan bahwa parameter yang diteruskan mungkinnull
(apa yang dilarangorElseGet
danorElseThrow
).sumber
solusi saya adalah memeriksanya dengan cara ini
if(item.isPresent()){ item.get().setId("1q2w3e4r5t6y") }
sumber
Opsional dibuat sehingga kode bisa setelah beberapa dekade ini, akhirnya mulai menghindar null.
Hapus .get (), kembalikan Opsional itu sendiri dan buat kode panggilan menanganinya dengan tepat (seperti yang harus dilakukan jika Anda mengembalikan null).
sumber