Collections.emptyList în Java

Metode utilitare: Collections Java 5 (singletonList: Java 1.3)

emptyList() returnează o listă goală nemodificabilă; singletonList(x) o listă nemodificabilă cu un singur element.

Sintaxă
static <T> List<T> emptyList()
static <T> List<T> singletonList(T o)

// la fel: emptySet, emptyMap, singleton, singletonMap

Ce face Collections.emptyList

Collections.emptyList() returnează o listă goală care nu poate fi modificată. Este bună ca valoare de retur „nu am găsit nimic”, în loc de null: codul care o primește poate face for sau size() fără verificări. Se folosește mereu același obiect, deci nu consumă memorie în plus.

Collections.singletonList(x) returnează o listă nemodificabilă cu exact un element. Spre deosebire de List.of(x), acceptă și null. Variante similare: emptySet, emptyMap, singleton (mulțime), singletonMap.

Din Java 9, List.of() și List.of(x) fac aproape același lucru și sunt mai des folosite în cod nou.

Parametri

Parametru Descriere
o Singurul element al listei (poate fi null).

Ce returnează

O listă nemodificabilă, goală sau cu un element.

Exemple

Exemplul 1: Listă goală în loc de null

import java.util.Collections;
import java.util.List;
import java.util.Map;

public class Main {
    static final Map<String, List<String>> cursuri = Map.of("Ana", List.of("Java", "SQL"));

    static List<String> cursuriPentru(String elev) {
        List<String> c = cursuri.get(elev);
        return c != null ? c : Collections.emptyList();
    }

    public static void main(String[] args) {
        for (String elev : new String[] {"Ana", "Radu"}) {
            List<String> c = cursuriPentru(elev);
            System.out.println(elev + ": " + c.size() + " cursuri " + c);
        }
    }
}

Rezultat

Ana: 2 cursuri [Java, SQL]
Radu: 0 cursuri []

Exemplul 2: singletonList pentru un singur destinatar

import java.util.Collections;
import java.util.List;

public class Main {
    static void trimite(List<String> destinatari, String mesaj) {
        for (String d : destinatari) {
            System.out.println("Către " + d + ": " + mesaj);
        }
    }

    public static void main(String[] args) {
        trimite(Collections.singletonList("ana@exemplu.ro"), "Comanda a fost livrată.");
        List<String> unu = Collections.singletonList("Iași");
        try {
            unu.add("Cluj");
        } catch (UnsupportedOperationException e) {
            System.out.println("singletonList nu se poate mări");
        }
    }
}

Rezultat

Către ana@exemplu.ro: Comanda a fost livrată.
singletonList nu se poate mări

Greșeli frecvente

  • Returnezi emptyList() și apoi codul apelant încearcă add pe ea. Apare UnsupportedOperationException; dacă apelantul trebuie să adauge, returnează new ArrayList<>().
  • Returnezi null în loc de o listă goală. Apelanții trebuie să verifice mereu null și uită.

Comenzi înrudite

  • List.of: Creează o listă nemodificabilă din valorile date (of) sau dintr-o copie a altei colecții (copyOf).
  • Collections.nCopies: Returnează o listă nemodificabilă cu aceeași valoare repetată de n ori. Utilă pentru valori inițiale și separatoare.
  • Collections.unmodifiableList: Returnează o vedere doar-pentru-citire a unei liste: cine o primește nu o poate modifica, dar schimbările originalului se văd.