'İsPresent ()' işareti olmadan 'Optional.get ()'


92

Java'da aşağıdaki arama koduna sahibim:

return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();

Ada göre sütun bulmak ve bulunan ilkini geri vermek istiyordum.

Hiçbir şey bulunmadığı ve işlenmesi gereken bir durum olduğunu anlıyorum, ama nasıl?

Bu küfürle istediği şey bu mu?

'Optional.get()' without 'isPresent()' check

?

Nasıl düzeltilir? Hiçbir nullşey bulunmazsa geri dönmek istiyorum.

GÜNCELLEME

Tamam, tamam, bunun findFirst()geri döndüğünü fark etmemiştim Optional.


2
$Java'da bir tanımlayıcı olarak kullanmamanız gerektiğini unutmayın : JLS Sec 3.8 : "$ işareti yalnızca mekanik olarak oluşturulan kaynak kodunda veya nadiren eski sistemlerde önceden var olan adlara erişmek için kullanılmalıdır."
Andy Turner

Yanıtlar:


187

Değiştir get()ile orElse(null).


1
Neden? :) Neden orElse"veya" ile başlıyor?
ölçülü yük

15
Çünkü yöntem adı budur. Ve elsebir anahtar kelimedir.
Andy Turner

8
@Dims, getOrElse'nin kısa bir biçimi, sadece get'i dışarıda bırakıyor. Opsiyonel ile normalde kullanmalısınız orElseyerine getçünkü getdeğeri null ise bir özel durum oluşturur.
puhlen

4
@puhlen bir orElseGet()alır Supplier<T>, orElse()bir T. Bunlar eşdeğer değil.
bcsb1001

2
@ bcsb1001 demeye çalıştığı şey bu değil, "getOrElse" amacını açıklamak için icat ettiği bir isim orElse; orElseGetyorumunda herhangi bir referans yok ;)
Rorrim

22
...findFirst().orElse(null);

Varsa değeri döndürür, aksi takdirde döndürür null. Belgeler , iletilen parametrenin ( ve için yasak olan ) olabileceğini söylüyor .nullorElseGetorElseThrow


1
bu kısmen doğrudur. findFirst () şu kurala sahiptir: "Karşılaşma sırası olmadığında, Akıştan herhangi bir öğeyi döndürür." -> bu nedenle, filtreniz eşleşen öğeyi döndürmezse, findFirst () ilkini döndürür (akış önceden boştur)
Fl0R1D3R

1

benim çözümüm bu şekilde kontrol etmekti

if(item.isPresent()){
  item.get().setId("1q2w3e4r5t6y")
}

0

Kod, tüm bu on yıllardan sonra nihayet boş değerden kaçınmaya başlayabilmesi için isteğe bağlı oluşturuldu .

.Get () öğesini kaldırın, İsteğe Bağlı'nın kendisini iade edin ve çağıran kodun bununla uygun şekilde ilgilenmesini sağlayın (tıpkı boş döndürmeniz durumunda yapılması gerektiği gibi).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.