Menemukan Max / Min dari Daftar atau Koleksi

1. Perkenalan

Pengantar singkat tentang cara menemukan nilai min / max dari daftar / koleksi tertentu dengan API Streaming yang kuat di Java8.

2. Temukan Max dalam Daftar Integer

Kita bisa menggunakan metode max () yang disediakan melalui antarmuka java.util.Stream . Ini menerima referensi metode:

@Test public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator() { // given List listOfIntegers = Arrays.asList(1, 2, 3, 4, 56, 7, 89, 10); Integer expectedResult = 89; // then Integer max = listOfIntegers .stream() .mapToInt(v -> v) .max().orElseThrow(NoSuchElementException::new); assertEquals("Should be 89", expectedResult, max); }

Mari kita lihat lebih dekat kodenya:

  1. Memanggil metode stream () pada daftar untuk mendapatkan aliran nilai dari daftar
  2. Memanggil mapToInt (nilai -> nilai) di aliran untuk mendapatkan Aliran Integer
  3. Memanggil metode max () di streaming untuk mendapatkan nilai maks
  4. Memanggil orElseThrow () untuk menampilkan pengecualian jika tidak ada nilai yang diterima dari max ()

3. Temukan Min Dengan Objek Kustom

Untuk menemukan min / max pada objek khusus, kita juga dapat menyediakan ekspresi lambda untuk logika pengurutan pilihan kita.

Pertama-tama, tentukan POJO kustom:

class Person { String name; Integer age; // standard constructors, getters and setters }

Kami ingin menemukan objek Person dengan usia minimum:

@Test public void whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda() { // given Person alex = new Person("Alex", 23); Person john = new Person("John", 40); Person peter = new Person("Peter", 32); List people = Arrays.asList(alex, john, peter); // then Person minByAge = people .stream() .min(Comparator.comparing(Person::getAge)) .orElseThrow(NoSuchElementException::new); assertEquals("Should be Alex", alex, minByAge); }

Mari kita lihat logika ini:

  1. Memanggil metode stream () pada daftar untuk mendapatkan aliran nilai dari daftar
  2. Memanggil metode min () di streaming untuk mendapatkan nilai minimum. Kami meneruskan fungsi lambda sebagai pembanding, ini digunakan untuk memutuskan logika pengurutan untuk menentukan nilai minimum
  3. Memanggil orElseThrow () untuk menampilkan pengecualian jika tidak ada nilai yang diterima dari min ()

4. Kesimpulan

Dalam artikel singkat ini, kita membahas bagaimana metode max () dan min () dari API Stream Java 8 dapat digunakan untuk menemukan nilai maksimum dan minimum dari Daftar / Koleksi.

Seperti biasa, kode tersedia di Github.