Rumah  >  Artikel  >  Java  >  Bilakah anda harus menggunakan Optional.orElseGet() dan bukannya Optional.orElse()?

Bilakah anda harus menggunakan Optional.orElseGet() dan bukannya Optional.orElse()?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 22:47:31444semak imbas

When should you use Optional.orElseGet() instead of Optional.orElse()?

Perbezaan antara Optional.orElse() dan Optional.orElseGet()

Kelas Optional menyediakan kaedah seperti orElse() dan orElseGet() untuk mendapatkan semula nilai daripada Pilihan jika ia ada, atau berikan nilai lalai jika ia kosong. Walau bagaimanapun, terdapat perbezaan yang ketara dalam tingkah laku mereka:

  • orElse(): Sentiasa memanggil fungsi yang disediakan untuk mendapatkan nilai lalai, tidak kira sama ada Pilihan mengandungi nilai atau bukan.
  • orElseGet(): Memanggil fungsi yang disediakan hanya jika Pilihan kosong.

Bila Menggunakan orElseGet()

Perbezaan utama ialah orElseGet() menangguhkan pelaksanaan fungsi perolehan nilai lalai sehingga ia diperlukan, manakala orElse() sentiasa melaksanakan fungsi tersebut. Ini boleh menjadi penting dalam situasi di mana mendapatkan nilai lalai ialah operasi yang mahal atau memakan masa yang anda hanya mahu lakukan jika perlu.

Contoh:

Pertimbangkan senario di mana anda perlu mencari sumber (diwakili oleh Pilihan) dan mendapatkan semula nilainya, atau memberikan nilai lalai. Jika mendapatkan nilai lalai memerlukan pertanyaan pangkalan data yang mahal, anda ingin menggunakan orElseGet() untuk mengelakkan pertanyaan apabila sumber itu ada.

<code class="java">Optional<Resource> resource = findResource();
Resource result = orElseGet(() -> getExpensiveDefaultValue());</code>

Nota Tambahan:

  • orElseGet() menerima pelaksanaan antara muka Pembekal, yang merupakan antara muka berfungsi yang mewakili fungsi tanpa hujah.
  • Walaupun orElseGet() tidak memanggil fungsi yang disediakan apabila Pilihan bukan- kosong, ia masih menilai ungkapan lambda. Ini bermakna bahawa sebarang kesan sampingan dalam ungkapan masih akan berlaku.

Kesimpulan:

orElseGet() menyediakan cara untuk menangguhkan pelaksanaan nilai lalai fungsi mendapatkan semula sehingga diperlukan, membenarkan pengoptimuman prestasi dalam kes di mana mendapatkan nilai lalai adalah mahal atau tidak diingini apabila Pilihan tidak kosong.

Atas ialah kandungan terperinci Bilakah anda harus menggunakan Optional.orElseGet() dan bukannya Optional.orElse()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn