Јава Стреамс за почетнике: Увод у употребу Стреамс у Јави

Јава Стреамс за почетнике: Увод у употребу Стреамс у Јави

Јава 8 токови омогућавају програмерима да извуку прецизне податке из велике збирке, користећи скуп унапред дефинисаних операција.





Пре објављивања Јаве 8, коришћење израза 'стреам' у Јави би се аутоматски повезало са И/О. Међутим, Јава 8 је увео ток који се може назвати скупом рачунских корака повезаних заједно у оно што се обично назива „проточни ток“.





Овај чланак ће вас упознати са токовима Јава 8 и показати како они могу бити корисни у вашим пројектима.





Шта је ток?

Стреам је Јава интерфејс који узима извор, спроводи низ операција за издвајање одређених података, а затим те податке даје апликацији на употребу. У суштини, омогућава вам да извучете специјализоване податке из збирке генерализованих података.

Како функционишу стримови

Струјни цевовод увек почиње са извором. Врста извора зависи од врсте података са којима имате посла, али два популарнија су низови и збирке.



Да бисте колекцију претворили у почетни ток, мораћете да додате стреам () функцију према извору. Ово ће поставити извор у цевовод тока где се налази неколико различитих посредничких операција (нпр филтер () и врста() ) може да оперише на њему.

Након што се спроведу све потребне посредне операције, можете увести терминалну операцију (нпр за сваки() ), који ће произвести претходно издвојене податке из извора.





Живот без токова

Јава 8 је објављен 2014. године, али су пре тога Јава програмери још увек морали да извуку специјализоване податке из збирке општих података.

пренос датотека са рачунара на телефон

Рецимо да имате листу насумичних знакова који су комбиновани са случајним бројевима да формирају јединствене вредности низа, али желите само вредности које почињу знаком Ц и желите да распоредите резултат у растућем редоследу. Овако бисте извукли те податке без токова.





Повезан: Шта треба да знате о коришћењу низова у Јави

Пример филтрирања и сортирања вредности без токова


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

Такође ћете морати да декларишете и покренете листу низа било да користите токове или неки други начин екстракције. Оно што не бисте морали да радите да користите токове је декларисање нове променљиве која садржи потребне вредности, нити стварање осталих пет плус редова кода у горњем примеру.

Повезан: Како креирати и изводити операције над низовима у Јави

Горњи код производи следећи излаз у конзоли:


C11
C12
C13
C14
C15
C16

Живот са струјама

У програмирању ефикасност говори о стварању истог резултата са знатно мање кода. То је управо оно што проточни ток ради за програмера. Дакле, следећи пут када неко пита: зашто је важно користити стримове у свом пројекту? Једноставно речено: токови подржавају ефикасно програмирање.

Настављајући са горњим примером, ево како увођење токова трансформише цео програм.

Филтрирање и сортирање вредности са примером тока


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Горњи код показује колико је моћно интерфејс за пренос. Она узима листу случајних вредности низа и претвара је у ток помоћу стреам () функција. Ток се затим смањује на листу низа која садржи потребне вредности (што су све вредности које почињу са Ц. ), помоћу филтер () функција.

Као што можете видети у горњем примеру, Ц. вредности су насумично распоређене у листи поља. Ако бисте одштампали ток на овој тачки цевовода, вредност Ц15 би се прво штампало. Стога врста() функција је уведена у проточни ток за преуређивање новог низа у растућем редоследу.

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


C11
C12
C13
C14
C15
C16

Пренос посредних операција

Постоји опсежна листа посредних операција које се могу користити у проточном току.

Струјни цевовод увек почиње са једним извором и а стреам () функцију, и увек се завршава једном операцијом терминала (мада постоји неколико различитих опција за избор.) Али између ова два одељка налази се листа од шест посредничких операција које можете користити.

У нашем горњем примеру, само две од ових посредних операција се користе --- филтер () и врста() . Посредна операција коју одаберете зависиће од задатака које желите да обавите.

Да је било која од вредности које почињу са Ц у нашој горњој листи низа малих слова, а ми смо на њима извршили исте посредничке операције, добили бисмо следећи резултат.

Извођење операција филтрирања и сортирања на малим вредностима Пример


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Горњи код ће произвести следеће вредности у конзоли:


C11
C12
C14
C15

Једини проблем са горњим излазом је тај што не представља тачно све Ц. вредности у нашој листи низа. Добар начин за исправљање ове мале грешке је увођење још једне посредничке операције у проточни ток; ова операција је позната као Мапа() функција.

Пример примене функције карте


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Тхе Мапа() функција трансформише објекат из једног стања у друго; у нашем горе наведеном примеру, претвара све мале знакове у листи поља у велика слова.

Постављање Мапа() функцију непосредно пре филтер () функција преузима све вредности које почињу са Ц. са листе поља.

Горњи код производи следећи резултат у конзоли, успешно представљајући све Ц. вредности на листи низа.


C11
C12
C13
C14
C15
C16

Остале три посредничке операције које можете користити у апликацијама су:

  • завирити ()
  • лимит ()
  • скип ()

Јава 8 стримови олакшавају стварање ефикасног кода

Помоћу токова Јава 8 можете извући додатне специфичне, релевантне податке из великог извора у једној линији кода. Све док укључите почетно стреам () функцијом и оператором терминала, можете користити било коју комбинацију посредничких операција које пружају одговарајуће резултате за ваш циљ.

како се прави групни текст

Ако се питате о линији кода која се налази унутар наше филтер () функција; познат је као 'ламбда израз'. Ламбда изрази су још једна функција која је уведена у Јави 8 и има много грумена који би вам могли бити од користи.

Објави Објави Твеет Емаил Кратак увод у Јава 8 Ламбде

Ако сте програмер на Јави и желите да сазнате више о ламбдама Јава 8, у овом чланку ћемо детаљније погледати ламбда синтаксу и употребу.

Прочитајте следеће
Повезане теме
  • Програмирање
  • Јава
  • Кодирање Туториали
О аутору Кадеисха Кеан(Објављен 21 чланак)

Кадеисха Кеан је програмер софтвера и писац техничке/технологије. Она има изразиту способност да поједностави неке од најсложенијих технолошких концепата; производњу материјала који може лако разумети сваки почетник у технологији. Одушевљена је писањем, развојем занимљивог софтвера и путовањем по свету (кроз документарне филмове).

Више од Кадеисха Кеан

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили