Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mendapatkan Semua Nilai Maksimum daripada Strim Java, Mengendalikan Hubungan dengan Berkesan?

Bagaimanakah Saya Boleh Mendapatkan Semua Nilai Maksimum daripada Strim Java, Mengendalikan Hubungan dengan Berkesan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-14 14:45:16501semak imbas

How Can I Retrieve All Maximum Values from a Java Stream, Handling Ties Effectively?

Mengatasi Had Java Stream dalam Mengembalikan Semua Nilai Maks

Fungsi maks Strim mengenal pasti nilai maksimum dalam strim dengan mudah. Walau bagaimanapun, ia beroperasi pada prinsip "dahulu, dilayan dahulu", berpotensi meninggalkan nilai maksimum lain jika terdapat pertalian. Untuk menangani had ini dan mendapatkan semua nilai maksimum, pendekatan alternatif diperlukan.

Penyelesaian Dua Laluan

Untuk koleksi input, pendekatan dua hala boleh digunakan:

  1. Tentukan nilai maksimum menggunakan maks pada panjang integer.
  2. Tapis koleksi untuk mendapatkan semua rentetan dengan panjang maksimum.

Penyelesaian ini menampung berbilang nilai maksimum tetapi menanggung kos lelaran ke atas keseluruhan input dua kali.

Pengumpul Pas Tunggal

Apabila input ialah aliran, pengumpul satu laluan boleh digunakan:

static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) {
    return Collector.of(
        ArrayList::new,
        (list, t) -> {
            if (list.isEmpty() || comp.compare(t, list.get(0)) == 0) {
                list.add(t);
            } else if (comp.compare(t, list.get(0)) > 0) {
                list.clear();
                list.add(t);
            }
        },
        (list1, list2) -> {
            ...
            // Compare and merge lists based on maximum values
        }
    );
}

Pengumpul ini mengekalkan invarian kesetaraan, menambah atau membuang unsur-unsur yang perlu. Apabila menggabungkan senarai, ia mempertimbangkan elemen maksimum setiap satu dan menggabungkannya apabila sama.

Dengan menggabungkan pengumpul ini dengan strim, semua nilai maksimum boleh diperolehi dalam satu pas.

Kesimpulan

Walaupun aliran maks dalam Java mempunyai hadnya, penyelesaian alternatif boleh dimanfaatkan untuk mengatasinya. Penyelesaian dua laluan adalah cekap untuk koleksi, manakala pengumpul satu laluan terbukti berguna untuk strim, membolehkan untuk mendapatkan semula semua nilai maksimum.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Semua Nilai Maksimum daripada Strim Java, Mengendalikan Hubungan dengan Berkesan?. 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