Rumah >Java >javaTutorial >Bagaimana untuk Mengembalikan Semua Nilai Maksimum daripada Strim Java Menggunakan Fungsi `maks`?

Bagaimana untuk Mengembalikan Semua Nilai Maksimum daripada Strim Java Menggunakan Fungsi `maks`?

Linda Hamilton
Linda Hamiltonasal
2024-12-13 12:24:11945semak imbas

How to Return All Maximum Values from a Java Stream Using the `max` Function?

Kembalikan Semua Nilai Maksimum Menggunakan Fungsi Maks dalam Aliran Java

Apabila menggunakan fungsi maks dalam aliran lambda Java 8, percanggahan boleh muncul dalam senario di mana berbilang objek menghasilkan nilai maksimum yang sama. Fungsi ini mengeluarkan wakil sewenang-wenangnya tanpa menilai atau mempertimbangkan semua calon yang berdaya maju.

Untuk menangani had ini, kaedah alternatif diperlukan untuk mendapatkan semua nilai maksimum dengan tepat. Malangnya, pendekatan mudah tidak tersedia, memerlukan penggunaan koleksi untuk menyimpan hasil separa.

Penyelesaian Dua Laluan

Untuk input yang disimpan dalam koleksi (Senarai< String> senarai), proses dua peringkat boleh digunakan:

  1. Pastikan panjang rentetan terpanjang (cth., int terpanjang = list.stream().mapToInt(String::length).max().orElse(-1);).
  2. Tapis senarai untuk mengekstrak semua rentetan dengan panjang maksimum (cth., Senarai hasil = list.stream().filter(s -> s.length() == paling lama).collect(toList());).

Penyelesaian Single-Pass (Strim)

Untuk menangani senario laluan tunggal dengan aliran, pengumpul tersuai boleh dibina berdasarkan yang disediakan Pembanding:

static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) {
    return Collector.of(
        ArrayList::new,
        (list, t) -> {
            int c;
            if (list.isEmpty() || (c = comp.compare(t, list.get(0))) == 0) {
                list.add(t);
            } else if (c > 0) {
                list.clear();
                list.add(t);
            }
        },
        (list1, list2) -> {
            // Processing for list merging logic
        }
    );
}

Untuk menggunakan pengumpul ini dalam strim, cuma panggil collect:

Stream<String> input = ... ;
List<String> result = input.collect(maxList(comparing(String::length)));

Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Semua Nilai Maksimum daripada Strim Java Menggunakan Fungsi `maks`?. 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