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:
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!