Max / Min van een lijst of verzameling zoeken

1. Inleiding

Een korte introductie over het vinden van de min / max-waarde uit een bepaalde lijst / verzameling met de krachtige Stroom API in Java8.

2. Zoek Max in een lijst met gehele getallen

We kunnen gebruiken max () methode die wordt aangeboden via de java.util.Stream koppel. Het accepteert een methodeverwijzing:

@Test openbare leegte whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator () {// gegeven lijst listOfIntegers = Arrays.asList (1, 2, 3, 4, 56, 7, 89, 10); Geheel getal verwachteResultaat = 89; // dan Integer max = listOfIntegers .stream () .mapToInt (v -> v) .max (). orElseThrow (NoSuchElementException :: nieuw); assertEquals ("Moet 89 zijn", verwachtResultaat, max); }

Laten we de code eens nader bekijken:

  1. Roeping stroom() methode op de lijst om een ​​stroom waarden uit de lijst op te halen
  2. Roeping mapToInt (waarde -> waarde) op de stream om een ​​Integer-stream te krijgen
  3. Roeping max () methode op de stream om de maximale waarde te krijgen
  4. Roeping orElseThrow () om een ​​uitzondering te genereren als er geen waarde is ontvangen van max ()

3. Zoek min met aangepaste objecten

Om de min / max op aangepaste objecten te vinden, kunnen we ook een lambda-uitdrukking leveren voor onze favoriete sorteerlogica.

Laten we eerst de aangepaste POJO definiëren:

klasse Persoon {Stringnaam; Integer leeftijd; // standaard constructeurs, getters en setters}

We willen de Persoon object met de minimumleeftijd:

@Test openbare leegte whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda () {// gegeven Persoon alex = nieuwe Persoon ("Alex", 23); Persoon john = nieuwe persoon ("Jan", 40); Persoon peter = nieuwe persoon ("Peter", 32); Lijst personen = Arrays.asList (alex, john, peter); // dan Persoon minByAge = mensen .stream () .min (Comparator.comparing (Persoon :: getAge)) .orElseThrow (NoSuchElementException :: nieuw); assertEquals ("Zou Alex moeten zijn", alex, minByAge); }

Laten we deze logica eens bekijken:

  1. Roeping stroom() methode op de lijst om een ​​stroom waarden uit de lijst op te halen
  2. Roeping min () methode op de stream om de minimumwaarde te krijgen. We geven een lambda-functie door als een comparator, deze wordt gebruikt om de sorteerlogica te bepalen voor het bepalen van de minimumwaarde
  3. Roeping orElseThrow () om een ​​uitzondering te genereren als er geen waarde wordt ontvangen van min()

4. Conclusie

In dit korte artikel hebben we onderzocht hoe de max () en min () methoden van Java 8's Stroom API kan worden gebruikt voor vind de maximale en minimale waarde van a Lijst / verzameling.

Zoals altijd is de code beschikbaar op Github.


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