Ce face Stream.limit
limit(n) lasă să treacă cel mult n elemente și apoi oprește stream-ul. Este modul obișnuit de a opri un stream infinit (iterate, generate) și de a afla „primele 3”, după o sortare.
skip(n) aruncă primele n elemente și le lasă pe celelalte. Împreună cu limit îți dă paginare: pagina p de mărime m este skip(p * m).limit(m).
Dacă stream-ul are mai puține elemente decât n, limit le dă pe toate, iar skip dă un stream gol. Valorile negative aruncă IllegalArgumentException.
Parametri
| Parametru | Descriere |
|---|---|
maxim |
Câte elemente să păstreze limit. |
n |
Câte elemente de la început să sară skip. |
Ce returnează
Un stream mai scurt.
Exemple
Exemplul 1: Podiumul unui concurs
import java.util.Comparator;
import java.util.List;
public class Main {
record Concurent(String nume, int puncte) {}
public static void main(String[] args) {
List<Concurent> lista = List.of(
new Concurent("Ana", 87), new Concurent("Radu", 95), new Concurent("Ioana", 91),
new Concurent("Dan", 78), new Concurent("Elena", 99));
lista.stream()
.sorted(Comparator.comparingInt(Concurent::puncte).reversed())
.limit(3)
.forEach(c -> System.out.println(c.nume() + " – " + c.puncte()));
}
}
Rezultat
Elena – 99
Radu – 95
Ioana – 91
Exemplul 2: Paginare cu skip și limit
import java.util.List;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
List<String> produse = IntStream.rangeClosed(1, 11).mapToObj(i -> "Produs " + i).toList();
int marime = 4;
for (int pagina = 0; pagina < 3; pagina++) {
System.out.println("Pagina " + (pagina + 1) + ": "
+ produse.stream().skip((long) pagina * marime).limit(marime).toList());
}
}
}
Rezultat
Pagina 1: [Produs 1, Produs 2, Produs 3, Produs 4]
Pagina 2: [Produs 5, Produs 6, Produs 7, Produs 8]
Pagina 3: [Produs 9, Produs 10, Produs 11]
Exemplul 3: Sari peste antetul unui fișier CSV
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> randuri = List.of("nume,oras", "Ana,Iași", "Mihai,Cluj", "Ioana,Brașov");
randuri.stream()
.skip(1)
.map(r -> r.split(","))
.forEach(c -> System.out.println(c[0] + " locuiește în " + c[1]));
}
}
Rezultat
Ana locuiește în Iași
Mihai locuiește în Cluj
Ioana locuiește în Brașov
Greșeli frecvente
- Pui
limitînaintea luisortedcând vrei „primele 3 cele mai mari”. Obții primele 3 din listă, sortate; sortează întâi, apoi limitează. - Dai un număr negativ.
limit(-1)șiskip(-1)aruncăIllegalArgumentException.
Comenzi înrudite
Stream.takeWhile: takeWhile ia elemente cât timp condiția e adevărată și se oprește la primul care nu o respectă; dropWhile le sare pe acestea.Stream.iterate: Creează un stream din formule: iterate pornește de la o valoare și aplică un pas, generate cere fiecare valoare unui Supplier.Stream.sorted: Sortează elementele stream-ului, în ordinea naturală sau după un Comparator.Stream.findFirst: Returnează primul element din stream (findFirst) sau oricare element (findAny), ca Optional.