Finne Min / Max i en matrise med Java

1. Introduksjon

I denne korte opplæringen skal vi se hvordan du finner maksimums- og minimumsverdiene i en matrise ved hjelp av Java 8-er Strøm API.

Vi begynner med å finne minimum i en rekke med heltall, og deretter finner vi maksimum i en rekke objekter.

2. Oversikt

Det er mange måter å finne min eller maks verdi i en uordnet matrise, og de ser alle ut som:

SET MAX to array [0] FOR i = 1 to array length - 1 IF array [i]> MAX THAN SET MAX to array [i] ENDIF ENDFOR

Vi skal se på hvordan Java 8 kan skjule disse detaljene for oss. Men i tilfeller der Java's API ikke passer oss, kan vi alltid gå tilbake til denne grunnleggende algoritmen.

Fordi vi må sjekke hver verdi i matrisen, er alle implementeringer det På).

3. Finne den minste verdien

De java.util.stream.IntStream grensesnittet gir min metode som vil fungere bra for våre formål.

Siden vi bare jobber med heltall, min krever ikke en Komparator:

@Test offentlig ugyldig nårArrayIsOfIntegerThenMinUsesIntegerComparator () {int [] heltall = ny int [] {20, 98, 12, 7, 35}; int min = Arrays.stream (heltall) .min () .getAsInt (); assertEquals (7, min); }

Legg merke til hvordan vi opprettet Heltall strøm objekt ved hjelp av strøm statisk metode i Arrays. Det er ekvivalente strøm metoder for hver primitive array-type.

Siden matrisen kan være tom, min returnerer en Valgfri, så å konvertere det til en int, vi bruker getAsInt.

4. Finne det største tilpassede objektet

La oss lage en enkel POJO:

offentlig klasse bil {privat streng modell; private int topSpeed; // standardkonstruktører, getters og settere}

Og så kan vi bruke Strøm API igjen for å finne den raskeste bilen i en rekke Bils:

@Test offentlig ugyldig nårArrayIsOfCustomTypeThenMaxUsesCustomComparator () {Car porsche = new Car ("Porsche 959", 319); Bilferrari = ny bil ("Ferrari 288 GTO", 303); Bil bugatti = ny bil ("Bugatti Veyron 16.4 Super Sport", 415); Bil mLLaren = ny bil ("McLaren F1", 355); Bil [] fastCars = {porsche, ferrari, bugatti, mcLaren}; Car maxBySpeed ​​= Arrays.stream (fastCars) .max (Comparator.comparing (Car :: getTopSpeed)) .orElseThrow (NoSuchElementException :: new); assertEquals (bugatti, maxBySpeed); }

I dette tilfellet den statiske metoden strøm av Arrays returnerer en forekomst av grensesnittet java.util.stream.Stream hvor metoden maks krever en Komparator.

Vi kunne ha laget vår egen skikk Komparator, men Comparator. Sammenligning er mye lettere.

Merk igjen at maks returnerer en Valgfri eksempel av samme grunn som før.

Vi kan enten denne verdien, eller vi kan gjøre alt annet som er mulig med Valgfris, som eller ElseTrow som kaster et unntak hvis maks returnerer ikke en verdi.

5. Konklusjon

Vi så i denne korte artikkelen hvor enkelt og kompakt det er å finne maks og min på en matrise ved hjelp av Strøm API for Java 8.

For mer informasjon om dette biblioteket, se Oracle-dokumentasjonen.

Implementeringen av alle disse eksemplene og kodebiter finner du på GitHub.


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