Stream.toList în Java

Operații finale pe stream-uri Java 16 (toArray: Java 8)

Adună elementele stream-ului într-o listă care nu se poate modifica, sau într-un tablou cu toArray.

Sintaxă
List<T> toList()
Object[] toArray()
<A> A[] toArray(IntFunction<A[]> generator)

Ce face Stream.toList

toList() este cea mai simplă operație finală: pune toate elementele, în ordine, într-o List. Lista returnată nu se poate modifica: add, remove sau set aruncă UnsupportedOperationException. Dacă ai nevoie de o listă modificabilă, folosește collect(Collectors.toCollection(ArrayList::new)) sau new ArrayList<>(...).

toArray() fără argumente returnează un Object[]. Pentru un tablou de tipul corect, dai constructorul tabloului: toArray(String[]::new).

Parametri

Parametru Descriere
generator Pentru toArray: funcția care creează tabloul, de obicei Tip[]::new.

Ce returnează

O List<T> nemodificabilă (toList) sau un tablou (toArray).

Exemple

Exemplul 1: Listă și tablou din același stream de date

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> orase = List.of("iași", "cluj", "arad");

        List<String> lista = orase.stream().map(String::toUpperCase).toList();
        System.out.println(lista);

        String[] tablou = orase.stream().map(String::toUpperCase).toArray(String[]::new);
        System.out.println(Arrays.toString(tablou) + " are " + tablou.length + " elemente");

        Object[] obiecte = orase.stream().toArray();
        System.out.println(obiecte.getClass().getSimpleName());
    }
}

Rezultat

[IAȘI, CLUJ, ARAD]
[IAȘI, CLUJ, ARAD] are 3 elemente
Object[]

Exemplul 2: Lista de la toList nu se poate modifica

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        List<Integer> note = Stream.of(7, 9, 10).toList();
        try {
            note.add(8);
        } catch (UnsupportedOperationException e) {
            System.out.println("Nu pot adăuga în lista de la toList().");
        }

        List<Integer> modificabila = new ArrayList<>(Stream.of(7, 9, 10).toList());
        modificabila.add(8);
        System.out.println(modificabila);
    }
}

Rezultat

Nu pot adăuga în lista de la toList().
[7, 9, 10, 8]

Greșeli frecvente

  • Încerci să adaugi în lista de la toList(). Este nemodificabilă; copiaz-o într-o ArrayList sau folosește Collectors.toCollection(ArrayList::new).
  • Faci cast la (String[]) stream.toArray(). Tabloul este de fapt Object[] și primești ClassCastException; folosește toArray(String[]::new).
  • Pui null în stream și te aștepți la eroare ca la List.of. toList() acceptă valori null.

Comenzi înrudite

  • Stream.collect: Adună elementele într-un rezultat (listă, set, map, text) folosind un Collector, de obicei din clasa Collectors.
  • Collectors.toList: Adună elementele stream-ului într-o listă (toList), într-o mulțime fără duplicate (toSet) sau într-o listă ce nu se poate modifica.
  • Stream.forEach: Rulează o acțiune (de obicei o afișare) pentru fiecare element; forEachOrdered păstrează ordinea și la stream-uri paralele.
  • Stream: Un șir de valori prelucrate pas cu pas: filtrezi, transformi, sortezi și aduni rezultatul, fără bucle scrise de mână.