Middle
Mire használják a stream-eket az új Java verzióban?
sobes.tech MI
Válasz az MI-től
A Java 8+-ban az áramlatokat az adatsorok deklaratív feldolgozására használják. Lehetővé teszik funkcionális műveletek végrehajtását gyűjteményeken (listák, halmazok), tömbökön vagy más adatforrásokon csővezeték-stílusban.
Az áramlatok használatának fő előnyei:
- Deklaratív stílus: Leírhatod, "mit" kell tenni az adatokkal, nem "hogyan". Ez olvashatóbbá és érthetőbbé teszi a kódot.
- Lusta értékelés: A műveletek csak akkor hajtódnak végre, amikor szükség van rájuk, ez javíthatja a teljesítményt, különösen nagy adatmennyiségek esetén.
- Párhuzamos feldolgozás: Az áramlatokat könnyen párhuzamosíthatod (
parallelStream()használatával), hatékonyan kihasználva a többmagos processzorokat. - A boilerplate kód csökkentése: Hagyományos ciklusokat és iterátorokat helyettesítenek kifejezőbb és kompaktabb szerkezetek.
- Változatlanság: Az áramlatok nem módosítják az eredeti adatforrást.
Gyakori műveletek példái az áramlatokkal:
- Szűrés:
filter()- elemek kiválasztása feltétel alapján. - Átalakítás (mapping):
map()- minden elem átalakítása. - Rendezés:
sorted()- elemek rendezése. - Egyedi elemek:
distinct()- duplikátumok eltávolítása. - Csoportosítás:
collect(Collectors.groupingBy(...))- elemek csoportosítása jellemző szerint. - Statisztika/Összegzés:
count(),sum(),average(),max(),min(),reduce()- összegző műveletek. - Eredmények gyűjtése gyűjteménybe:
collect(Collectors.toList()),collect(Collectors.toSet())- eredmények gyűjtése gyűjteménybe.
Használati példa:
// Sztringlista szűrése és átalakítása stream segítségével
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Stream létrehozása a listából
.filter(name -> name.startsWith("A")) // Szűrés: csak "A"-val kezdődő nevek
.map(String::toUpperCase) // Átalakítás: minden név nagybetűs
.collect(Collectors.toList()); // Eredmény gyűjtése új listába
System.out.println(filteredNames); // Kimenet: [ALICE]