Menemukan Min / Max dalam Array dengan Java

1. Perkenalan

Dalam tutorial singkat ini, kita akan melihat bagaimana menemukan nilai maksimum dan minimum dalam sebuah array, menggunakan API Stream Java 8 .

Kita akan mulai dengan mencari nilai minimum dalam array bilangan bulat, lalu kita akan menemukan nilai maksimum dalam array objek.

2. Ikhtisar

Ada banyak cara untuk menemukan nilai min atau max dalam array tidak berurutan, dan semuanya terlihat seperti:

SET MAX to array[0] FOR i = 1 to array length - 1 IF array[i] > MAX THEN SET MAX to array[i] ENDIF ENDFOR

Kami akan melihat bagaimana Java 8 dapat menyembunyikan detail ini dari kami . Namun, dalam kasus di mana API Java tidak cocok untuk kita, kita selalu dapat kembali ke algoritme dasar ini.

Karena kita perlu memeriksa setiap nilai dalam array, semua implementasinya adalah O (n) .

3. Menemukan Nilai Terkecil

The java.util.stream.IntStream antarmuka menyediakan min metode yang akan bekerja dengan baik untuk tujuan kita.

Karena kami hanya bekerja dengan bilangan bulat, min tidak memerlukan Pembanding :

@Test public void whenArrayIsOfIntegerThenMinUsesIntegerComparator() { int[] integers = new int[] { 20, 98, 12, 7, 35 }; int min = Arrays.stream(integers) .min() .getAsInt(); assertEquals(7, min); }

Perhatikan bagaimana kita membuat objek aliran Integer menggunakan metode statis aliran dalam Array . Ada metode aliran yang setara untuk setiap tipe array primitif.

Karena array bisa kosong, min mengembalikan Opsional, jadi untuk mengubahnya menjadi int , kita menggunakan getAsInt .

4. Menemukan Objek Kustom Terbesar

Mari buat POJO sederhana:

public class Car { private String model; private int topSpeed; // standard constructors, getters and setters }

Dan kemudian kita dapat menggunakan Stream API lagi untuk menemukan mobil tercepat dalam rangkaian Mobil :

@Test public void whenArrayIsOfCustomTypeThenMaxUsesCustomComparator() { Car porsche = new Car("Porsche 959", 319); Car ferrari = new Car("Ferrari 288 GTO", 303); Car bugatti = new Car("Bugatti Veyron 16.4 Super Sport", 415); Car mcLaren = new Car("McLaren F1", 355); Car[] fastCars = { porsche, ferrari, bugatti, mcLaren }; Car maxBySpeed = Arrays.stream(fastCars) .max(Comparator.comparing(Car::getTopSpeed)) .orElseThrow(NoSuchElementException::new); assertEquals(bugatti, maxBySpeed); }

Dalam hal ini, metode statis aliran dari Array mengembalikan sebuah instance dari interface java.util.stream.Stream mana metode max membutuhkan Comparator .

Kita bisa saja membuat Pembanding kustom kita sendiri , tetapi Comparator.comparing jauh lebih mudah.

Perhatikan lagi bahwa max mengembalikan instance Opsional untuk alasan yang sama seperti sebelumnya.

Kita bisa mendapatkan nilai ini, atau kita bisa melakukan apa pun yang memungkinkan dengan Opsional , seperti orElseThrow yang memunculkan pengecualian jika max tidak mengembalikan nilai.

5. Kesimpulan

Kami melihat di artikel singkat ini betapa mudah dan ringkasnya untuk menemukan maks dan min pada sebuah array, menggunakan Stream API Java 8.

Untuk informasi lebih lanjut tentang perpustakaan ini, silakan merujuk ke dokumentasi Oracle.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di GitHub.