Find max / min for en liste eller samling

1. Introduktion

En hurtig introduktion til, hvordan man finder min / max-værdien fra en given liste / samling med de magtfulde Strøm API i Java8.

2. Find Max på en liste over heltal

Vi kan bruge maks () metode leveret gennem java.util.Stream interface. Det accepterer en metodehenvisning:

@Test public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator () {// given List listOfIntegers = Arrays.asList (1, 2, 3, 4, 56, 7, 89, 10); Heltal forventet resultat = 89; // derefter Heltal max = listOfIntegers .stream () .mapToInt (v -> v) .max (). ellerElseThrow (NoSuchElementException :: new); assertEquals ("Bør være 89", expectResult, max); }

Lad os se nærmere på koden:

  1. Ringer strøm() metode på listen for at få en strøm af værdier fra listen
  2. Ringer mapToInt (værdi -> værdi) på stream for at få en Integer Stream
  3. Ringer maks () metode på strømmen for at få den maksimale værdi
  4. Ringer orElseThrow () at kaste en undtagelse, hvis der ikke modtages nogen værdi fra maks ()

3. Find Min med tilpassede objekter

For at finde min / max på brugerdefinerede objekter kan vi også give et lambda-udtryk til vores foretrukne sorteringslogik.

Lad os først definere den brugerdefinerede POJO:

klasse Person {String name; Heltal alder // standardkonstruktører, getters og settere}

Vi ønsker at finde Person objekt med minimumsalderen:

@Test offentlig ugyldigt nårListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda () {// given Person alex = new Person ("Alex", 23); Person john = ny person ("John", 40); Person peter = ny person ("Peter", 32); Liste over mennesker = Arrays.asList (alex, john, peter); // derefter Person minByAge = personer .stream () .min (Comparator.comparing (Person :: getAge)) .orElseThrow (NoSuchElementException :: new); assertEquals ("Bør være Alex", alex, minByAge); }

Lad os se på denne logik:

  1. Ringer strøm() metode på listen for at få en strøm af værdier fra listen
  2. Ringer min () metode på strømmen for at få minimumværdien. Vi sender en lambda-funktion som en komparator, denne bruges til at bestemme sorteringslogikken til at bestemme minimumsværdien
  3. Ringer orElseThrow () at kaste en undtagelse, hvis der ikke modtages nogen værdi fra min()

4. Konklusion

I denne hurtige artikel undersøgte vi, hvordan maks () og min () metoder fra Java 8'er Strøm API kan bruges til find den maksimale og mindste værdi fra en Liste / samling.

Som altid er koden tilgængelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found