Rumah > Java > javaTutorial > Bilakah saya harus menggunakan Optional.orElseGet() dan bukannya Optional.orElse() dalam Java?

Bilakah saya harus menggunakan Optional.orElseGet() dan bukannya Optional.orElse() dalam Java?

Barbara Streisand
Lepaskan: 2024-10-26 09:27:30
asal
726 orang telah melayarinya

When should I use Optional.orElseGet() instead of Optional.orElse() in Java?

Menentukan Perbezaan Antara Optional.orElse() dan Optional.orElseGet()

Di Java, kelas Optional menyediakan kaedah seperti orElse( ) dan orElseGet() untuk menangani nilai yang berpotensi hilang atau batal. Memahami nuansanya adalah penting untuk penggunaan yang berkesan.

orElse() vs. orElseGet()

  • orElse(): Mengembalikan nilai jika ada, atau lalai yang disediakan jika tiada.
  • orElseGet(): Mengembalikan nilai jika ada, atau hasil daripada memanggil pembekal yang dibekalkan jika tiada. Pembekal tidak digunakan jika nilainya ada.

Bila Menggunakan orElseGet()

  • Pengoptimuman Prestasi: Pertimbangkan untuk menggunakan orElseGet() apabila tindakan untuk melakukan pada nilai yang hilang adalah mahal dari segi pengiraan, kerana ia mengelakkan pelaksanaan yang tidak perlu dalam senario isPresent().

Contoh dengan Fungsi Dunia Sebenar

Untuk menggambarkan perbezaan, pertimbangkan fungsi berikut:

<code class="java">public Optional<String> findMyPhone(int phoneId)</code>
Salin selepas log masuk

Senario 1: orElse()

Apabila pilihan.isPresent() == true:

  • orElse() akan memanggil fungsi berikutnya secara berlebihan, walaupun nilai sudah ada.

When optional.isPresent() == false:

  • orElse() akan memanggil fungsi berikutnya tanpa mengira keperluannya.

Senario 2: orElseGet()

Apabila optional.isPresent() == benar:

  • orElseGet() tidak akan memanggil pembekal kerana nilainya ada.

Apabila optional.isPresent() == false :

  • orElseGet() akan memanggil pembekal untuk menjana nilai lalai.

Contoh Kod

<code class="java">public class TestOptional {
    public Optional<String> findMyPhone(int phoneId) {
        return phoneId == 10
                ? Optional.of("MyCheapPhone")
                : Optional.empty();
    }

    public String buyNewExpensivePhone() {
        System.out.println("Going to a very far store to buy a new expensive phone");
        return "NewExpensivePhone";
    }

    public static void main(String[] args) {
        // Scenario 1: orElse()
        Optional<String> phone = findMyPhone(10).orElse(buyNewExpensivePhone());
        // Scenario 2: orElseGet()
        phone = findMyPhone(-1).orElseGet(() -> buyNewExpensivePhone());
    }
}</code>
Salin selepas log masuk

The kod menunjukkan gelagat berbeza orElse() dan orElseGet() berdasarkan kehadiran atau ketiadaan nilai pilihan.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan