Rumah > Java > javaTutorial > teks badan

Bagaimana untuk mengira maksimum dan minimum dalam Java menggunakan Streams?

Mary-Kate Olsen
Lepaskan: 2024-11-08 19:03:02
asal
586 orang telah melayarinya

¿Cómo calcular el máximo y mínimo en Java usando Streams?

Dalam siaran ini kita akan melihat cara menggunakan Java Streams API untuk mengira maksimum dan minimum koleksi elemen. Untuk melakukan ini, kita akan menggunakan kaedah max() dan min() bagi kelas Stream. Kaedah ini membolehkan kami memperoleh maksimum dan minimum koleksi elemen, masing-masing, menggunakan pembanding tersuai.

Andaikan kita mempunyai senarai jenis Senarai di mana Peperiksaan ialah rekod dengan dua nama dan gred hartanah, dan kami ingin mendapatkan peperiksaan dengan gred tertinggi dan gred terendah.

public record Exam(String name, Double grade) { }
Salin selepas log masuk
Salin selepas log masuk
var exams = Arrays.asList(
        new Exam("Alice", 9.5),
        new Exam("Bob", 6.0),
        new Exam("Charlie", 7.5),
        new Exam("David", 8.0),
        new Exam("Eve", 8.5)
);
Salin selepas log masuk
Salin selepas log masuk

Dalam versi Java terkini, anda boleh menggunakan kaedah max() dan min() kelas Stream untuk tujuan ini dengan menghantar pembanding tersuai dan mendapatkan Pilihan dengan hasilnya. Sekiranya versi Java tidak menyokong kaedah max() dan min(), kaedah collect() boleh digunakan menghantar Collector sebagai parameter, sama ada Collectors.maxBy() atau Collectors.minBy(), dan seterusnya a pembanding diperibadikan. Jika anda menggunakan pilihan terakhir ini dalam versi Java terbaharu, IDE itu sendiri akan mencadangkan menukarnya kepada kaedah max() atau min().

Mari mulakan dengan mencipta pembanding tersuai jenis Comparator yang membolehkan kami memperoleh gred dalam tertib menaik.

Comparator<Exam> byGradeAsc = (e1, e2) -> (int) (e1.grade() - e2.grade());
Salin selepas log masuk
Salin selepas log masuk

Sebagai contoh, pembanding ini akan mengembalikan nombor negatif jika gred peperiksaan pertama kurang daripada gred kedua, sifar jika sama dan nombor positif jika gred peperiksaan pertama lebih besar daripada gred peperiksaan pertama. yang kedua, untuk mendapatkan maklumat lanjut anda boleh merujuk pautan ini ke siaran yang menerangkan cara antara muka Pembanding berfungsi.

Pembanding ini boleh ditakrifkan dengan cara lain menggunakan kaedah comparingDouble() kelas Comparator yang membolehkan kita mencipta komparator daripada fungsi yang mengekstrak nilai berganda daripada objek tanpa perlu menulis pembanding secara manual.

Comparator<Exam> byGradeAscClean = Comparator.comparingDouble(Exam::grade);
Salin selepas log masuk

Dalam takrifan ini, pembanding diberitahu bahawa ia mesti mengambil objek jenis Peperiksaan, mengekstrak nilai sifat gred dan membandingkan nilai menggunakan jenis data Berganda.

Kedua-dua cara ini adalah setara dan boleh digunakan secara bergantian, yang kedua mungkin agak sukar untuk difahami pada mulanya, tetapi apabila anda memahaminya, lebih mudah untuk menulis dan membaca.

Sekarang anda mempunyai pembanding, yang tinggal hanyalah menggunakannya dalam kaedah maks() dan min() untuk mendapatkan peperiksaan dengan markah tertinggi dan terendah, masing-masing.

public record Exam(String name, Double grade) { }
Salin selepas log masuk
Salin selepas log masuk

Dalam kes ini, anda mendapat Pilihan dengan peperiksaan dengan markah tertinggi dan terendah, masing-masing. Sekiranya senarai peperiksaan kosong, Optional.empty() akan dikembalikan. Untuk mendapatkan nilai Pilihan, anda boleh menggunakan kaedah ifPresent() yang menerima Pengguna dan melaksanakan kod yang dihantar kepadanya sebagai hujah jika nilai wujud.

var exams = Arrays.asList(
        new Exam("Alice", 9.5),
        new Exam("Bob", 6.0),
        new Exam("Charlie", 7.5),
        new Exam("David", 8.0),
        new Exam("Eve", 8.5)
);
Salin selepas log masuk
Salin selepas log masuk

Atau hanya lulus sebagai hujah kaedah rujukan untuk mencetak nilai Pilihan, jika Pilihan kosong tiada apa yang akan dicetak, jika tidak nilai Pilihan akan dicetak dengan memanggil kaedah toString() objek Peperiksaan

Comparator<Exam> byGradeAsc = (e1, e2) -> (int) (e1.grade() - e2.grade());
Salin selepas log masuk
Salin selepas log masuk

Di sana, dengan cara ini anda boleh mendapatkan maksimum dan minimum koleksi elemen menggunakan Java Streams API dan antara muka Comparator.

Atas ialah kandungan terperinci Bagaimana untuk mengira maksimum dan minimum dalam Java menggunakan Streams?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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