Стрим је уведен у Јава 8 Стреам АПИ се користи за обраду колекција објеката. Стрим у Јави је низ објеката који подржавају различите методе које се могу конструисати да би се произвео жељени резултат.
Коришћење Стреам-а у Јави
Употреба Стреам-а у Јави је поменута у наставку:
- Стреам АПИ је начин за изражавање и обраду колекција објеката.
- Омогућите нам да извршимо операције као што је филтрирање, смањење мапирања и сортирање.
Како направити Јава стреам
Креирање Јава Стреам-а је један од најосновнијих корака пре разматрања функционалности Јава Стреам-а. Испод је дата синтакса за декларисање Јава стрима.
јава стринг класа
Синтакса
Стреам
стреам;
Овде је Т или објекат класе или тип података у зависности од декларације.
Карактеристике Јава стрима
Карактеристике Јава стримова су наведене у наставку:
- Стреам није структура података; само узима улаз из низова колекција или И/О канала.
- Токови не мењају оригиналне податке; они само производе резултате користећи своје методе.
- Међуоперације (као што је мапа филтера итд.) су лење и враћају други ток тако да можете да их повежете заједно.
- Терминална операција (као што је цоллецт форЕацх цоунт) завршава ток и даје коначни резултат.
Различите операције на токовима
Постоје две врсте операција у стримовима:
- Интермедиате Оператионс
- Терминалне операције
Интермедиате Оператионс

Интермедијарне операције су типови операција у којима је више метода везано у низу.
Карактеристике међуоперација
- Методе су повезане заједно.
- Међуоперације трансформишу ток у други ток.
- Омогућава концепт филтрирања где један метод филтрира податке и прослеђује их другом методу након обраде.
Важне посредничке операције
Постоји неколико средњих операција наведених у наставку:
1. мап() : Метод мапе се користи за враћање тока који се састоји од резултата примене дате функције на елементе овог тока.
Синтакса:
Стреам мапа (функција super T ? extends R>мапер)
2. филтер() : Метод филтера се користи за одабир елемената према предикату који се прослеђује као аргумент.
Синтакса:
Стреам
филтер (предикат super T>предикат)
3. сортед() : сортирани метод се користи за сортирање тока.
Синтакса:
Стреам
сортирано()
Стреамсортирано (компаратор super T>компаратор)
4. флатМап(): Операција флатМап у Јава Стреамс-у се користи за изравнавање низа колекција у један ток елемената.
Синтакса:
јава веза мискл
Стреам флатМап(Функција super T ? extends Stream extends R>> мапер)
5. различит() : Уклања дуплиране елементе. Враћа ток који се састоји од различитих елемената (према Објецт.екуалс(Објецт)).
Синтакса:
Стреам
различит()
6. завирите() : Изводи радњу на сваком елементу без модификације тока. Враћа ток који се састоји од елемената овог тока који додатно изводе дату акцију на сваком елементу пошто се елементи троше из резултујућег тока.
Синтакса:
Стреам
завирите (Потрошач super T>акција)
Јава програм који показује употребу свих међуоперација:
Javaimport java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class StreamIntermediateOperationsExample { public static void main(String[] args) { // List of lists of names List<List<String>> listOfLists = Arrays.asList( Arrays.asList('Reflection' 'Collection' 'Stream') Arrays.asList('Structure' 'State' 'Flow') Arrays.asList('Sorting' 'Mapping' 'Reduction' 'Stream') ); // Create a set to hold intermediate results Set<String> intermediateResults = new HashSet<>(); // Stream pipeline demonstrating various intermediate operations List<String> result = listOfLists.stream() .flatMap(List::stream) .filter(s -> s.startsWith('S')) .map(String::toUpperCase) .distinct() .sorted() .peek(s -> intermediateResults.add(s)) .collect(Collectors.toList()); // Print the intermediate results System.out.println('Intermediate Results:'); intermediateResults.forEach(System.out::println); // Print the final result System.out.println('Final Result:'); result.forEach(System.out::println); } }
Излаз
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE
Објашњење:
- ЛистОфЛистс се креира као листа која садржи друге листе стрингова.
- флатМап(Листа::стреам): Поравнава угнежђене листе у један ток низова.
- филтер(с -> с.стартсВитх('С')) : Филтрира стрингове тако да обухвата само оне који почињу са 'С'.
- мап(Стринг::тоУпперЦасе) : Конвертује сваки стринг у току у велика слова.
- различит() : Уклања све дупле низове.
- сортирано() : Сортира резултујуће низове по абецедном реду.
- завирите(...): Додаје сваки обрађени елемент скупу интермедиатеРесултс за међуинспекцију.
- цоллецт(Цоллецторс.тоЛист()): Сакупља завршне обрађене стрингове у листу која се зове резултат.
Програм штампа међурезултате ускладиштене у скупу интермедиатеРесултс. Коначно, штампа листу резултата која садржи потпуно обрађене стрингове након свих стрим операција.
Терминалне операције
Терминалне операције су тип операција које враћају резултат. Ове операције се не обрађују даље, само враћају коначну вредност резултата.
Важне операције терминала
1. цоллецт() : Метод прикупљања се користи за враћање резултата међуоперација извршених на току.
Синтакса:
Р цоллецт(Колекционар super T A R>колекционар)
2. форЕацх() : ФорЕацх метода се користи за понављање кроз сваки елемент тока.
Синтакса:
воид форЕацх (Потрошач super T>акција)
3. смањити(): Метод смањења се користи да би се елементи тока свели на једну вредност. Метод смањења узима БинариОператор као параметар.
Синтакса:
Т смањи(Т идентитет БинарниОператор
акумулатор)
Опционосмањити (БинариОператор акумулатор)
4. цоунт() : Враћа број елемената у току.
Синтакса:
дуго бројање ()
5. финдФирст() : Враћа први елемент тока ако је присутан.
Синтакса:
Опционо
финдФирст() случајни број у Јави
6. аллМатцх() : Проверава да ли се сви елементи тока подударају са датим предикатом.
Синтакса:
боолеан аллМатцх(предикат super T>предикат)
7. Било које подударање () : Проверава да ли било који елемент тока одговара датом предикату.
Синтакса:
Боолеан Аниматцх (предикат super T>предикат)
Овде се променљивој анс додељује 0 као почетна вредност и њој се додаје и.
Напомена: Интермедиате Оператионс се покрећу на основу концепта Лази Евалуатион који осигурава да сваки метод враћа фиксну вредност (терминална операција) пре преласка на следећи метод.
Јава програм који користи све терминалске операције:
Javaimport java.util.*; import java.util.stream.Collectors; public class StreamTerminalOperationsExample { public static void main(String[] args) { // Sample data List<String> names = Arrays.asList( 'Reflection' 'Collection' 'Stream' 'Structure' 'Sorting' 'State' ); // forEach: Print each name System.out.println('forEach:'); names.stream().forEach(System.out::println); // collect: Collect names starting with 'S' into a list List<String> sNames = names.stream() .filter(name -> name.startsWith('S')) .collect(Collectors.toList()); System.out.println('ncollect (names starting with 'S'):'); sNames.forEach(System.out::println); // reduce: Concatenate all names into a single string String concatenatedNames = names.stream().reduce( '' (partialString element) -> partialString + ' ' + element ); System.out.println('nreduce (concatenated names):'); System.out.println(concatenatedNames.trim()); // count: Count the number of names long count = names.stream().count(); System.out.println('ncount:'); System.out.println(count); // findFirst: Find the first name Optional<String> firstName = names.stream().findFirst(); System.out.println('nfindFirst:'); firstName.ifPresent(System.out::println); // allMatch: Check if all names start with 'S' boolean allStartWithS = names.stream().allMatch( name -> name.startsWith('S') ); System.out.println('nallMatch (all start with 'S'):'); System.out.println(allStartWithS); // anyMatch: Check if any name starts with 'S' boolean anyStartWithS = names.stream().anyMatch( name -> name.startsWith('S') ); System.out.println('nanyMatch (any start with 'S'):'); System.out.println(anyStartWithS); } }
Излаз:
ИзлазОбјашњење:
- Листа имена је креирана са узорцима низова.
- за сваког: Штампа свако име на листи.
- сакупљати : Филтрира имена која почињу са 'С' и прикупља их у нову листу.
- смањити : Спаја сва имена у један стринг.
- цоунт : Броји укупан број имена.
- финдФирст : Проналази и штампа прво име на листи.
- аллМатцх : Проверава да ли сва имена почињу са 'С'.
- несрећни : Проверава да ли неко име почиње са 'С'.
Програм штампа сва имена имена која почињу са 'С' спојена имена, број имена, име да ли сва имена почињу са 'С' и да ли неко име почиње са 'С'.
Предност Јава Стреам-а
Постоје неке предности због којих користимо Стреам у Јави као што је наведено у наставку:
- Но Стораге
- Пипелине оф Фунцтионс
- лењост
- Може бити бесконачан
- Може се паралелно
- Може се креирати од низова колекција Филес Линес Методе у Стреам ИнтСтреам итд.
Реални случајеви употребе Јава стримова
Стреамови се широко користе у савременим Јава апликацијама за:
- Обрада података
- За обраду ЈСОН/КСМЛ одговора
- За операције базе података
- Истовремена обрада