Min / Max keresése egy tömbben Java-val

1. Bemutatkozás

Ebben a rövid bemutatóban megnézzük, hogyan lehet megtalálni a maximális és a minimális értékeket egy tömbben, a Java 8-as segítségével Folyam API.

Kezdjük azzal, hogy megtaláljuk a minimumot egy egész szám tömbben, majd megtalálja a maximumot egy objektum tömbben.

2. Áttekintés

A rendezetlen tömbben sokféleképpen lehet megtalálni a min vagy a max értéket, és ezek mindegyike így néz ki:

Állítsa be a MAX értéket a [0] tömbhöz i = 1 a tömb hosszához - 1 HA tömb [i]> MAX AZONNAL A MAX állítsa be az [i] tömbhöz

Meg fogjuk vizsgálni, hogyan A Java 8 elrejtheti előttünk ezeket a részleteket. De azokban az esetekben, amikor a Java API-ja nem felel meg nekünk, mindig visszatérhetünk erre az alapvető algoritmusra.

Mivel ellenőriznünk kell a tömb egyes értékeit, minden megvalósítás igen Tovább).

3. A legkisebb érték megtalálása

A java.util.stream.IntStream felület biztosítja a min módszer ez rendben lesz a céljaink érdekében.

Mivel csak egész számokkal dolgozunk, min nem igényel a Összehasonlító:

@Test public void whenArrayIsOfIntegerThenMinUsesIntegerComparator () {int [] integers = new int [] {20, 98, 12, 7, 35}; int min = tömbök.stream (egész számok) .min () .getAsInt (); assertEquals (7, perc); }

Figyeljük meg, hogyan hoztuk létre a Egész szám stream objektumot a folyam statikus módszer ben Tömbök. Vannak egyenértékűek folyam módszerek minden primitív tömbtípusra.

Mivel a tömb üres lehet, min visszatér egy Választható, így ezt átalakítani egy int, használunk getAsInt.

4. A legnagyobb egyedi objektum megkeresése

Hozzunk létre egy egyszerű POJO-t:

public class Car {private String model; private int topSpeed; // szabványos kivitelezők, mérőeszközök és beállítók}

És akkor használhatjuk a Folyam Újra az API, hogy megtalálja a leggyorsabb autót a Autós:

@Test public void whenArrayIsOfCustomTypeThenMaxUsesCustomComparator () {Autó porsche = új autó ("Porsche 959", 319); Autó ferrari = új autó ("Ferrari 288 GTO", 303); Autó bugatti = új autó ("Bugatti Veyron 16.4 Super Sport", 415); Car mcLaren = new Car ("McLaren F1", 355); Autó [] fastCars = {porsche, ferrari, bugatti, mcLaren}; Autó maxBySpeed ​​= Tömbök.stream (fastCars) .max (Comparator.comparing (Car :: getTopSpeed)) .orElseThrow (NoSuchElementException :: new); assertEquals (bugatti, maxBySpeed); }

Ebben az esetben a statikus módszer folyam nak,-nek Tömbök visszatér a az interfész java.util.stream.Stream ahol a módszer max megköveteli a Összehasonlító.

Megalkothattuk volna a saját szokásunkat Összehasonlító, de Összehasonlító.összehasonlítás sokkal könnyebb.

Megjegyezzük még egyszer max visszatér egy Választható például ugyanazon okból, mint korábban.

Mi is tehetjük kap ezt az értéket, vagy bármit megtehetünk, amivel csak lehetséges Választhatós, mint vagyElseThrow ez kivételt vet, ha max nem ad vissza értéket.

5. Következtetés

Ebben a rövid cikkben láttuk, milyen egyszerű és kompakt megtalálni a tömbön a max és a min értékeket a Folyam Java 8 API.

A könyvtárral kapcsolatos további információk az Oracle dokumentációjában találhatók.

Ezen példák és kódrészletek megvalósítása megtalálható a GitHub-on.