Middle
Zašto se koriste streamovi u novoj verziji Jave?
sobes.tech АИ
Одговор од АИ
Поточи у Јави 8+ се користе за декларативну обраду секвенција података. Омогућавају извођење функционалних операција над колекцијама (листама, скуповима), низовима или другим изворима података у стилу цевовода.
Главне предности коришћења потока:
- Декларативни стил: Омогућавају опис "шта" треба урадити са подацима, а не "како". Ово чини код читљивијим и разумљивијим.
- Леније израчунавање: Операције се обрађују само када је потребно, што може побољшати перформансе, посебно при раду са великим количинама података.
- Паралелна обрада: Поточи се лако могу паралелизовати (коришћењем
parallelStream()), што омогућава ефикасно коришћење мулти-језгарних процесора. - Смањење количине шаблонског кода: Замењују традиционалне петље и итераторе са изразитијим и компактнијим конструкцијама.
- Непроменљивост: Поточи не мењају извор података.
Примери уобичајених операција са потоцима:
- Филтрирање:
filter()- избор елемената по услову. - Трансформација (маппинг):
map()- трансформација сваког елемента. - Сортирање:
sorted()- сортирање елемената. - Јединствени елементи:
distinct()- уклањање дупликата. - Груписање:
collect(Collectors.groupingBy(...))- груписање елемената по карактеристици. - Статистика/Агрегација:
count(),sum(),average(),max(),min(),reduce()- извођење агрегатних операција. - Скупљање у колекцију:
collect(Collectors.toList()),collect(Collectors.toSet())- сакупљање резултата у колекцију.
Пример употребе:
// Филтрирање и трансформација листе стрингова коришћењем потока
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Креирање потока из листе
.filter(name -> name.startsWith("A")) // Филтрирање: задржава само имена која почињу са "A"
.map(String::toUpperCase) // Трансформација: сваки назив у велика слова
.collect(Collectors.toList()); // Сакупљање резултата у нову листу
System.out.println(filteredNames); // Излаз: [ALICE]