Sobes.tech
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]