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:

  1. Ringer strøm() metode på listen for å få en strøm av verdier fra listen
  2. Ringer mapToInt (verdi -> verdi) på stream for å få en Integer Stream
  3. Ringer maks () metode på strømmen for å få maks verdi
  4. 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:

  1. Ringer strøm() metode på listen for å få en strøm av verdier fra listen
  2. 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
  3. 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.


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