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
Barbara Streisandasal
2024-10-26 09:27:30736semak imbas

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>

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>

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!

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