Java 8 Stream preskoči () u odnosu na ograničenje ()

1. Uvod

U ovom kratkom članku razgovarat ćemo o preskočiti() i ograničiti() metode Java Stream API-ja i ističu njihove sličnosti i razlike.

Iako ove dvije operacije isprva mogu izgledati prilično slično, zapravo se ponašaju vrlo različito i nisu zamjenjive. Zapravo se nadopunjuju i mogu biti korisni kada se koriste zajedno. Nastavite čitati da biste saznali više o njima.

2. The preskočiti() Metoda

The preskočiti (n) metoda je srednja operacija koja odbacuje prvu n elementi potoka. The n parametar ne može biti negativan, a ako je veći od veličine streama, preskočiti() vraća prazan tok.

Pogledajmo primjer:

Stream.of (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .filter (i -> i% 2 == 0) .skip (2) .forEach (i -> System. out.print (i + ""));

U ovom toku uzimamo parne brojeve potoka, ali preskačemo prva dva. Stoga je naš rezultat:

6 8 10

Kada se ovaj tok izvrši, za svakoga počinje tražiti predmete. Kad dođe do preskočiti(), ova operacija zna da se prve dvije stavke moraju odbaciti, pa ih ne dodaje u rezultirajući tok. Nakon toga kreira i vraća tok s preostalim stavkama.

Da bi to učinio, preskočiti() operacija mora zadržati stanje elemenata koji se vide u svakom trenutku. Zbog ovog razloga, mi to kažemo preskočiti() je operacija sa statusom države.

3. The ograničiti() Metoda

The ograničenje (n) metoda je druga srednja operacija koja vraća tok ne duži od tražene veličine. Kao i prije, n parametar ne može biti negativan.

Upotrijebimo to u primjeru:

Stream.of (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .filter (i -> i% 2 == 0) .limit (2) .forEach (i -> System. out.print (i + ""));

U ovom slučaju odabiremo samo dva parna broja iz naše struje int:

2 4

Kao što je slučaj sa preskočiti() operacija, ograničiti() je također operacija sa statusom države jer mora zadržati stanje predmeta koji se preuzimaju.

Ali za razliku od preskočiti(), koji potroši cijeli tok, čim ograničiti() dosegne maksimalan broj stavki, više ne troši više stavki i jednostavno vraća rezultirajući tok. Stoga, mi to kažemo ograničiti() je operacija kratkog spoja.

Kada radite s beskonačnim tokovima, ograničiti() može biti vrlo korisno za skraćivanje struje u konačnu:

Stream.iterate (0, i -> i + 1) .filter (i -> i% 2 == 0) .limit (10) .forEach (System.out :: println);

U ovom primjeru skraćujemo beskonačni tok brojeva u tok sa samo deset parnih brojeva.

4. Kombiniranje preskočiti() i ograničiti()

Kao što smo ranije spomenuli, preskočiti i ograničiti operacije se nadopunjuju i ako ih kombiniramo, u nekim slučajevima mogu biti od velike pomoći.

Zamislimo da svoj prethodni primjer želimo izmijeniti tako da dobije parne brojeve u serijama od deset. To možemo učiniti jednostavnim korištenjem oba preskočiti() i ograničiti() na istom toku:

privatni statički popis getEvenNumbers (int offset, int limit) {return Stream.iterate (0, i -> i + 1) .filter (i -> i% 2 == 0) .skip (offset) .limit (limit). collect (Collectors.toList ()); }

Kao što vidimo, ovom metodom možemo prilično lako paginirati kroz tok. Iako je ovo vrlo pojednostavljena paginacija, možemo vidjeti koliko to može biti moćno prilikom rezanja toka.

5. Zaključak

U ovom kratkom članku pokazali smo sličnosti i razlike preskočiti() i ograničiti() metode Java Stream API-ja. Također smo implementirali nekoliko jednostavnih primjera kako bismo pokazali kako možemo koristiti ove metode.

Kao i uvijek, puni izvorni kod za primjere dostupan je na GitHubu.


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