Middle
Zašto se u novoj verziji Jave koriste streamovi?
sobes.tech АИ
Одговор од АИ
Korišćenje streamova u novijim verzijama Jave (od Java 8 nadalje) opravdano je iz više razloga koji se odnose na efikasnost, čitljivost koda i paralelnu obradu podataka:
- Funkcionalno programiranje: Streamovi omogućavaju pisanje koda u deklarativnijem stilu, fokusirajući se na šta treba uraditi sa podacima, a ne kako. To poboljšava čitljivost i održavanje.
- Paralelna obrada: Streamovi olakšavaju paralelizaciju operacija nad kolekcijama pomoću
parallelStream(). JVM upravlja deljenjem podataka i spajanjem rezultata, pojednostavljujući razvoj višestrukih niti. - Efikasnost: Lazy evaluation (leno procenjivanje) u streamovima znači da se operacije izvršavaju samo kada je to potrebno, smanjujući troškove. Međuzavisne operacije (map, filter) ne izvršavaju se odmah, već pri pozivu terminalne operacije (collect, forEach).
- Poboljšana obrada kolekcija: Obuhvata skup standardnih i visokih operacija za filtriranje, mapiranje i agregaciju podataka u kolekcijama, čime se smanjuje količina ponovljenog koda sa petljama.
- Nepromenljive operacije: Streamovi ne menjaju originalnu kolekciju iz koje su kreirani, podržavaju principe imutabilnosti i olakšavaju otklanjanje grešaka.
// Primer korišćenja streamova za filtriranje i mapiranje
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Kreiranje streama
.filter(name -> name.startsWith("C")) // Filtriranje
.map(String::toUpperCase) // Mapiranje
.collect(Collectors.toList()); // Sakupljanje u novu listu
System.out.println(filteredNames); // Izlaz: [CHARLIE]
Paralelni streamovi:
// Primer paralelne obrade u streamu
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.parallelStream() // Kreiranje paralelnog streama
.mapToInt(Integer::intValue) // Konverzija u IntStream
.sum(); // Sabiranje
System.out.println(sum); // Izlaz: 55 (može biti brže izračunato na višejezgrenim sistemima)