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
Lepaskan: 2024-12-13 12:24:11
asal
891 orang telah melayarinya

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
        }
    );
}
Salin selepas log masuk

Untuk menggunakan pengumpul ini dalam strim, cuma panggil collect:

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

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!

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