Стреам Ин Јава

Стреам Ин Јава

Стрим је уведен у Јава 8 Стреам АПИ се користи за обраду колекција објеката. Стрим у Јави је низ објеката који подржавају различите методе које се могу конструисати да би се произвео жељени резултат. 

Коришћење Стреам-а у Јави

Употреба Стреам-а у Јави је поменута у наставку:

  • Стреам АПИ је начин за изражавање и обраду колекција објеката.
  • Омогућите нам да извршимо операције као што је филтрирање, смањење мапирања и сортирање.

Како направити Јава стреам

Креирање Јава Стреам-а је један од најосновнијих корака пре разматрања функционалности Јава Стреам-а. Испод је дата синтакса за декларисање Јава стрима.

Синтакса

Стреам стреам;

Овде је Т или објекат класе или тип података у зависности од декларације.

Карактеристике Јава стрима

Карактеристике Јава стримова су наведене у наставку:

  • Стреам није структура података; само узима улаз из низова колекција или И/О канала.
  • Токови не мењају оригиналне податке; они само производе резултате користећи своје методе.
  • Међуоперације (као што је мапа филтера итд.) су лење и враћају други ток тако да можете да их повежете заједно.
  • Терминална операција (као што је цоллецт форЕацх цоунт) завршава ток и даје коначни резултат.

Различите операције на токовима

Постоје две врсте операција у стримовима:

  1. Интермедиате Оператионс
  2. Терминалне операције

Интермедиате Оператионс

Операције са Јава стримом

Интермедијарне операције су типови операција у којима је више метода везано у низу.

Карактеристике међуоперација

  • Методе су повезане заједно.
  • Међуоперације трансформишу ток у други ток.
  • Омогућава концепт филтрирања где један метод филтрира податке и прослеђује их другом методу након обраде.

Важне посредничке операције

Постоји неколико средњих операција наведених у наставку:

1. мап() : Метод мапе се користи за враћање тока који се састоји од резултата примене дате функције на елементе овог тока.

Синтакса:

Стреам мапа (функција мапер)

2. филтер() : Метод филтера се користи за одабир елемената према предикату који се прослеђује као аргумент.

Синтакса:

Стреам филтер (предикат предикат)

3. сортед() : сортирани метод се користи за сортирање тока.

Синтакса:

Стреам сортирано()
Стреам сортирано (компаратор компаратор)

4. флатМап(): Операција флатМап у Јава Стреамс-у се користи за изравнавање низа колекција у један ток елемената.

Синтакса:

Стреам флатМап(Функција > мапер)

5. различит() : Уклања дуплиране елементе. Враћа ток који се састоји од различитих елемената (према Објецт.екуалс(Објецт)).

Синтакса:

Стреам различит()

6. завирите() : Изводи радњу на сваком елементу без модификације тока. Враћа ток који се састоји од елемената овог тока који додатно изводе дату акцију на сваком елементу пошто се елементи троше из резултујућег тока.

Синтакса:

Стреам завирите (Потрошач акција)

Јава програм који показује употребу свих међуоперација:

Java
   import     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. цоллецт() : Метод прикупљања се користи за враћање резултата међуоперација извршених на току.

Синтакса:

Р цоллецт(Колекционар колекционар)

2. форЕацх() : ФорЕацх метода се користи за понављање кроз сваки елемент тока.

Синтакса:

воид форЕацх (Потрошач акција)

3. смањити(): Метод смањења се користи да би се елементи тока свели на једну вредност. Метод смањења узима БинариОператор као параметар.

Синтакса:

Т смањи(Т идентитет БинарниОператор акумулатор)
Опционо смањити (БинариОператор акумулатор)

4. цоунт() : Враћа број елемената у току.

Синтакса:

дуго бројање ()

5. финдФирст() : Враћа први елемент тока ако је присутан.

Синтакса:

Опционо финдФирст()

6. аллМатцх() : Проверава да ли се сви елементи тока подударају са датим предикатом.

Синтакса:

боолеан аллМатцх(предикат предикат)

7. Било које подударање () : Проверава да ли било који елемент тока одговара датом предикату.

Синтакса:

Боолеан Аниматцх (предикат предикат)

Овде се променљивој анс додељује 0 као почетна вредност и њој се додаје и.

Напомена: Интермедиате Оператионс се покрећу на основу концепта Лази Евалуатион који осигурава да сваки метод враћа фиксну вредност (терминална операција) пре преласка на следећи метод.

Јава програм који користи све терминалске операције:

Java
   import     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  );      }   }   

Излаз:

СтреамсОутпутИзлаз

Објашњење:

  • Листа имена је креирана са узорцима низова.
  • за сваког: Штампа свако име на листи.
  • сакупљати : Филтрира имена која почињу са 'С' и прикупља их у нову листу.
  • смањити : Спаја сва имена у један стринг.
  • цоунт : Броји укупан број имена.
  • финдФирст : Проналази и штампа прво име на листи.
  • аллМатцх : Проверава да ли сва имена почињу са 'С'.
  • несрећни : Проверава да ли неко име почиње са 'С'.

Програм штампа сва имена имена која почињу са 'С' спојена имена, број имена, име да ли сва имена почињу са 'С' и да ли неко име почиње са 'С'.

Предност Јава Стреам-а

Постоје неке предности због којих користимо Стреам у Јави као што је наведено у наставку:

  • Но Стораге
  • Пипелине оф Фунцтионс
  • лењост
  • Може бити бесконачан
  • Може се паралелно
  • Може се креирати од низова колекција Филес Линес Методе у Стреам ИнтСтреам итд.

Реални случајеви употребе Јава стримова

Стреамови се широко користе у савременим Јава апликацијама за:

  • Обрада података
  • За обраду ЈСОН/КСМЛ одговора
  • За операције базе података
  • Истовремена обрада