Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mendapatkan Semua Nilai Maksimum daripada Strim Java, Mengendalikan Hubungan dengan Berkesan?
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.
Untuk koleksi input, pendekatan dua hala boleh digunakan:
Penyelesaian ini menampung berbilang nilai maksimum tetapi menanggung kos lelaran ke atas keseluruhan input dua kali.
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.
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!