Mencari Maks / Min Senarai atau Koleksi

1. Pengenalan

Pengenalan cepat mengenai cara mencari nilai min / max dari senarai / koleksi tertentu dengan Stream API yang kuat di Java8.

2. Cari Max dalam Senarai Integer

Kita boleh menggunakan kaedah max () yang disediakan melalui antara muka java.util.Stream . Ia menerima rujukan kaedah:

@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 perhatikan kodnya dengan lebih dekat:

  1. Panggilan aliran () kaedah dalam senarai untuk mendapatkan aliran nilai dari senarai
  2. Memanggil petaToInt (nilai -> nilai) pada aliran untuk mendapatkan Integer Stream
  3. Memanggil kaedah maks () di aliran untuk mendapatkan nilai maksimum
  4. Memanggil atauElseThrow () untuk membuang pengecualian jika tidak ada nilai yang diterima dari maks ()

3. Cari Min Dengan Objek Tersuai

Untuk mencari min / max pada objek tersuai, kami juga dapat memberikan ungkapan lambda untuk logik penyortiran pilihan kami.

Mari tentukan terlebih dahulu POJO tersuai:

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

Kami ingin mencari objek Orang 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 lihat logik ini:

  1. Panggilan aliran () kaedah dalam senarai untuk mendapatkan aliran nilai dari senarai
  2. Memanggil kaedah min () di aliran untuk mendapatkan nilai minimum. Kami meneruskan fungsi lambda sebagai pembanding, ini digunakan untuk menentukan logik penyortiran untuk menentukan nilai minimum
  3. Memanggil atauElseThrow () untuk membuang pengecualian jika tidak ada nilai yang diterima dari min ()

4. Kesimpulan

Dalam artikel ringkas ini, kami meneroka bagaimana kaedah max () dan min () dari API Stream Java 8 dapat digunakan untuk mencari nilai maksimum dan minimum dari Daftar / Koleksi.

Seperti biasa, kodnya terdapat di Github.