Ce face Stream.concat
Stream.concat(a, b) creează un stream nou care conține elementele lui a, urmate de elementele lui b. Stream-urile primite nu mai pot fi folosite separat după aceea.
Metoda primește exact două stream-uri. Pentru mai multe, poți apela concat de mai multe ori sau poți folosi Stream.of(a, b, c).flatMap(s -> s), care este mai eficient pentru un număr mare de stream-uri.
Parametri
| Parametru | Descriere |
|---|---|
a |
Primul stream; elementele lui apar primele. |
b |
Al doilea stream; elementele lui apar după cele din a. |
Ce returnează
Un Stream<T> cu elementele lui a și apoi ale lui b.
Exemple
Exemplul 1: Două grupe într-o singură listă
import java.util.List;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
List<String> grupaA = List.of("Ana", "Bogdan");
List<String> grupaB = List.of("Carmen", "Dan", "Elena");
List<String> toti = Stream.concat(grupaA.stream(), grupaB.stream()).toList();
System.out.println(toti);
System.out.println("Total studenți: " + toti.size());
}
}
Rezultat
[Ana, Bogdan, Carmen, Dan, Elena]
Total studenți: 5
Exemplul 2: Trei surse de date
Pentru mai mult de două stream-uri, flatMap le lipește pe toate dintr-o dată.
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<String> moldova = Stream.of("Iași", "Suceava");
Stream<String> ardeal = Stream.of("Cluj", "Sibiu");
Stream<String> banat = Stream.of("Timișoara");
// varianta cu concat de două ori
System.out.println(Stream.concat(Stream.concat(moldova, ardeal), banat).toList());
// varianta cu flatMap
System.out.println(Stream.of(Stream.of("A", "B"), Stream.of("C"), Stream.of("D", "E"))
.flatMap(s -> s)
.toList());
}
}
Rezultat
[Iași, Suceava, Cluj, Sibiu, Timișoara]
[A, B, C, D, E]
Greșeli frecvente
- Folosești din nou stream-urile
asaubdupăconcat. Ele au fost consumate; creează stream-uri noi. - Imbrici foarte multe apeluri
concatîntr-o buclă. Poate duce laStackOverflowError; foloseșteflatMap.
Comenzi înrudite
Stream.of: Creează un stream direct din câteva valori; ofNullable face un stream gol pentru null, iar empty un stream fără elemente.Stream.flatMap: Transformă fiecare element într-un stream și lipește toate aceste stream-uri într-unul singur.Stream.builder: Construiește un stream element cu element, cu add(), și îl închide cu build().