Finne maks / min på en liste eller samling
1. Introduksjon
En rask intro om hvordan du finner min / max-verdien fra en gitt liste / samling med de kraftige Strøm API i Java8.
2. Finn Max i en liste over heltall
Vi kan bruke maks () metoden som tilbys gjennom java.util.Stream grensesnitt. Den godtar en metodereferanse:
@Test public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator () {// given List listOfIntegers = Arrays.asList (1, 2, 3, 4, 56, 7, 89, 10); Heltall forventet resultat = 89; // deretter Integer max = listOfIntegers .stream () .mapToInt (v -> v) .max (). orElseThrow (NoSuchElementException :: new); assertEquals ("Bør være 89", forventet resultat, maks); }
La oss se nærmere på koden:
- Ringer strøm() metode på listen for å få en strøm av verdier fra listen
- Ringer mapToInt (verdi -> verdi) på stream for å få en Integer Stream
- Ringer maks () metode på strømmen for å få maks verdi
- Ringer orElseThrow () å kaste et unntak hvis ingen verdi mottas fra maks ()
3. Finn min med egendefinerte objekter
For å finne min / maks på tilpassede objekter, kan vi også gi et lambdauttrykk for vår foretrukne sorteringslogikk.
La oss først definere den tilpassede POJO:
klasse Person {Strengnavn; Heltalder; // standardkonstruktører, getters og settere}
Vi ønsker å finne Person objekt med aldersgrensen:
@Test offentlig ugyldig nårListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda () {// gitt person alex = ny person ("Alex", 23); Person john = ny person ("John", 40); Person peter = ny person ("Peter", 32); Liste folk = Arrays.asList (alex, john, peter); // deretter Person minByAge = personer .stream () .min (Comparator.comparing (Person :: getAge)) .orElseThrow (NoSuchElementException :: new); assertEquals ("Bør være Alex", alex, minByAge); }
La oss ta en titt på denne logikken:
- Ringer strøm() metode på listen for å få en strøm av verdier fra listen
- Ringer min () metode på strømmen for å få minimumsverdien. Vi overfører en lambda-funksjon som en komparator, denne brukes til å bestemme sorteringslogikken for å bestemme minimumsverdien
- Ringer orElseThrow () å kaste et unntak hvis ingen verdi mottas fra min()
4. Konklusjon
I denne raske artikkelen undersøkte vi hvordan maks () og min () metoder fra Java 8-er Strøm API kan brukes til finn maksimums- og minimumsverdien fra a Liste / samling.
Som alltid er koden tilgjengelig på Github.