Pronalaženje maks. / Min. Popisa ili zbirke

1. Uvod

Kratki uvod o načinu pronalaska min / max vrijednosti s datog popisa / kolekcije pomoću moćnih Stream API u Javi8.

2. Pronađite Maxa na popisu cjelovitih brojeva

Možemo koristiti maks. () metoda osigurana putem java.util.Stream sučelje. Prihvaća referencu metode:

@Test public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator () {// dati popis listOfIntegers = Arrays.asList (1, 2, 3, 4, 56, 7, 89, 10); Cjelobrojni očekivani rezultat = 89; // tada Integer max = listOfIntegers .stream () .mapToInt (v -> v) .max (). orElseThrow (NoSuchElementException :: new); assertEquals ("Trebao bi biti 89", očekivani rezultat, maks.); }

Pogledajmo pobliže kod:

  1. Pozivanje stream () metodu na popisu za dobivanje toka vrijednosti s popisa
  2. Pozivanje mapToInt (vrijednost -> vrijednost) na streamu kako biste dobili cjeloviti tok
  3. Pozivanje maks. () metodom na streamu da biste dobili maksimalnu vrijednost
  4. Pozivanje iliElseThrow () da se izuzme iznimka ako se ne primi vrijednost maks. ()

3. Pronađite Min s prilagođenim objektima

Da bismo pronašli min / max na prilagođenim objektima, možemo pružiti i lambda izraz za željenu logiku sortiranja.

Prvo definirajmo prilagođeni POJO:

razred Osoba {Ime niza; Cijela dob; // standardni konstruktori, getteri i postavljači}

Želimo pronaći Osoba objekt s minimalnom dobi:

@Test public void whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda () {// data Person alex = new Person ("Alex", 23); Osoba john = nova osoba ("Ivan", 40); Osoba peter = nova osoba ("Petar", 32); Popis ljudi = Arrays.asList (alex, john, peter); // tada je osoba minByAge = people .stream () .min (Comparator.comparing (Person :: getAge)) .orElseThrow (NoSuchElementException :: new); assertEquals ("Trebao bi biti Alex", alex, minByAge); }

Pogledajmo ovu logiku:

  1. Pozivanje stream () metodu na popisu za dobivanje toka vrijednosti s popisa
  2. Pozivanje min () metodom na streamu da bi se dobila minimalna vrijednost. Prosljeđujemo lambda funkciju kao komparator, to se koristi za odlučivanje logike sortiranja za odlučivanje o minimalnoj vrijednosti
  3. Pozivanje iliElseThrow () izbaciti iznimku ako od min. ne dobije vrijednost()

4. Zaključak

U ovom kratkom članku istražili smo kako maks. () i min () metode iz Jave 8 Stream API se može koristiti za pronađite maksimalnu i minimalnu vrijednost iz a Popis / Zbirka.

Kao i uvijek, kôd je dostupan na Githubu.