Ce face Collectors.joining
Collectors.joining() lipește textele unul după altul. Cu un separator, joining(", "), pune textul dat între elemente, dar nu și după ultimul, așa că nu mai trebuie să ștergi virgula de la final.
Varianta cu trei argumente adaugă un prefix și un sufix: joining(", ", "[", "]"). Prefixul și sufixul apar și când stream-ul este gol (rezultatul este "[]").
Elementele trebuie să fie texte (CharSequence). Pentru numere sau obiecte, transformă-le înainte cu map(String::valueOf) sau map(Object::toString).
Parametri
| Parametru | Descriere |
|---|---|
separator |
Textul pus între elemente. |
prefix |
Textul de la început. |
sufix |
Textul de la sfârșit. |
Ce returnează
Un Collector care produce un String.
Exemple
Exemplul 1: Liste de nume, cu și fără separator
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> nume = List.of("Ana", "Mihai", "Elena");
System.out.println(nume.stream().collect(Collectors.joining()));
System.out.println(nume.stream().collect(Collectors.joining(", ")));
System.out.println(nume.stream().collect(Collectors.joining(", ", "Prezenți: ", ".")));
System.out.println(List.<String>of().stream().collect(Collectors.joining(", ", "[", "]")));
}
}
Rezultat
AnaMihaiElena
Ana, Mihai, Elena
Prezenți: Ana, Mihai, Elena.
[]
Exemplul 2: Numere unite într-un rând CSV
Notele sunt Integer, deci le transformăm în text cu map(String::valueOf) înainte de joining.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> note = List.of(9, 10, 7, 8);
String rand = note.stream().map(String::valueOf).collect(Collectors.joining(";"));
System.out.println("Ana;" + rand);
}
}
Rezultat
Ana;9;10;7;8
Greșeli frecvente
- Aplici
joiningpe un stream de numere: codul nu compilează. Adaugămap(String::valueOf). - Construiești textul cu
+=într-o buclă și ștergi apoi ultima virgulă.joining(", ")face asta corect dintr-o dată.
Comenzi înrudite
Collectors: Clasa cu rețete gata făcute pentru collect: liste, mulțimi, map-uri, texte unite, grupări, numărări și medii.Stream.map: Transformă fiecare element al stream-ului în altă valoare, eventual de alt tip.String.join: Lipește mai multe șiruri într-unul singur, cu un separator între ele (opusul lui split).Stream.collect: Adună elementele într-un rezultat (listă, set, map, text) folosind un Collector, de obicei din clasa Collectors.