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:
- Ringer strøm() metode på listen for at få en strøm af værdier fra listen
- Ringer mapToInt (værdi -> værdi) på stream for at få en Integer Stream
- Ringer maks () metode på strømmen for at få den maksimale værdi
- 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:
- Ringer strøm() metode på listen for at få en strøm af værdier fra listen
- 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
- 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.