Јава 8 токови омогућавају програмерима да издвоје прецизне податке из велике колекције, користећи скуп унапред дефинисаних операција.
Пре објављивања Јаве 8, употреба израза „ток“ у Јави аутоматски би била повезана са И / О. Међутим, Јава 8 је представила ток који се може назвати скупом рачунарских корака који су повезани ланцима у оно што се обично назива „цевовод тока“.
Овај чланак ће вас упознати са Јава 8 стреамовима и показати како они могу бити корисни у вашим пројектима.
Шта је ток?
Поток је Јава интерфејс који узима извор, спроводи скуп операција за издвајање одређених података, а затим те податке пружа апликацији на употребу. У основи, омогућава вам извлачење специјализованих података из збирке уопштених података.
Како токови функционишу
Струјни цевовод увек започиње са извором. Тип извора зависи од врсте података са којима имате посла, али два најпопуларнија су низови и колекције.
Да бисте колекцију трансформисали у почетни ток, мораћете да додате стреам () функција извору. Ово ће сместити извор у цевовод тока где постоји неколико различитих посредних операција (као што је
филтер () и врста()) могу да га оперишу.Након што се изврше све потребне посредничке операције, можете увести терминалну операцију (као што је за сваки()), који ће произвести претходно извучене податке из извора.
Живот без потока
Јава 8 је објављен 2014. године, али пре тога програмери Јаве још увек су морали да издвоје специјализоване податке из колекције општих података.
Рецимо да имате листу случајних знакова који се комбинују са случајним бројевима да би се створиле јединствене вредности низа, али желите само вредности које почињу са знаком „Ц“ и желите да распоредите резултат у растућем редоследу ред. Тако бисте извукли те податке без струјања.
Повезан: Шта треба да знате о коришћењу жица у Јави
Пример филтрирања и сортирања вредности без струјања
импорт јава.утил. Низ листа;
импорт јава.утил. Низови;
импорт јава.утил. Листа;
јавна класа Маин {
јавна статичка воид главна (Стринг [] аргс) {
// декларишу и иницијализују листу низова
Листа рандомВалуес = Арраис.асЛист (
"Е11", "Д12", "А13", "Ф14", "Ц15", "А16",
"Б11", "Б12", "Ц13", "Б14", "Б15", "Б16",
"Ф12", "Е13", "Ц11", "Ц14", "А15", "Ц16",
„Ф11“, „Ц12“, „Д13“, „Е14“, „Д15“, „Д16“
);
// прогласимо да ће листа поља чувати потребне вредности
Листа рекуиредВалуес = нови АрраиЛист <> ();
// издвајање потребних вредности и њихово складиштење у реккуиредВалуес
рандомВалуес.форЕацх (валуе -> {
иф (валуе.стартсВитх ("Ц")) {
рекуиредВалуес.адд (вредност);
}
});
// сортирај рекуиредВалуес у растућем редоследу
рекуиредВалуес.сорт ((вредност низа1, вредност низа2) -> вредност1.цомпареТо (вредност2));
// исписујемо сваку вредност на конзолу
рекуиредВалуес.форЕацх ((вредност низа) -> Систем.оут.принтлн (вредност));
}
}
Такође ћете морати да декларишете и иницијализујете листу низа без обзира да ли користите токове или неки други начин издвајања. Оно што не бисте морали да радите да сте користили стримове је да декларишете нову променљиву која садржи потребне вредности, нити да креирате осталих пет плус линија кода у горњем примеру.
Повезан: Како створити и извршити операције над низовима на Јави
Горњи код даје следећи излаз у конзоли:
Ц11
Ц12
Ц13
Ц14
Ц15
Ц16
Живот са потоцима
У програмирању, ефикасност говори о стварању истог резултата са знатно мање кода. То је управо оно што стреам пипелине ради за програмера. Па следећи пут када неко пита: „зашто је важно користити стримове у свом пројекту?“ Једноставно речено: „токови подржавају ефикасно програмирање“.
Настављајући са нашим горњим примером, ово је начин на који увођење токова трансформише читав програм.
Филтрирање и сортирање вредности помоћу примера тока
импорт јава.утил. Низови;
импорт јава.утил. Листа;
јавна класа Маин {
јавна статичка воид главна (Стринг [] аргс) {
// декларишу и иницијализују листу низова
Листа рандомВалуес = Арраис.асЛист (
"Е11", "Д12", "А13", "Ф14", "Ц15", "А16",
"Б11", "Б12", "Ц13", "Б14", "Б15", "Б16",
"Ф12", "Е13", "Ц11", "Ц14", "А15", "Ц16",
„Ф11“, „Ц12“, „Д13“, „Е14“, „Д15“, „Д16“
);
// преузима само вредности које почињу са Ц, сортира их и штампа на конзоли.
рандомВалуес.стреам (). филтер (валуе-> валуе.стартсВитх ("Ц")). сортед (). форЕацх (Систем.оут:: принтлн);
}
}
Горњи код показује колико је моћан интерфејс стрима. Потребна је листа случајних вредности низа и трансформише је у ток помоћу стреам () функцију. Поток се затим смањује на листу низова која садржи потребне вредности (што су све вредности које почињу са Ц.), помоћу филтер () функцију.
Као што видите у примеру изнад, Ц. вредности су насумично распоређене у листи низова. Ако бисте требали да одштампате ток у овом тренутку цевовода, вредност Ц15 прво би се штампало. Стога врста() функција је уведена у цевовод тока за преуређивање новог низа у растућем редоследу.
Коначна функција у цевоводу тока је а за сваки() функцију. Ово је терминална функција која се користи за заустављање цјевовода тока и даје сљедеће резултате у конзоли:
Ц11
Ц12
Ц13
Ц14
Ц15
Ц16
Постоји опсежна листа посредних операција које се могу користити у проточном цевоводу.
Струјни ток увек започиње једним извором и а стреам () функција, и увек се завршава једном операцијом терминала (мада постоји неколико различитих за одаберите из.) Али између ова два одељка налази се листа шест посредних операција које можете употреба.
У нашем примеру изнад, користе се само две од ових посредних операцијафилтер () и врста(). Интермедијарна операција коју одаберете зависиће од задатака које желите да извршите.
Да је било која од вредности које почињу са „Ц“ на нашој горњој листи низова написана малим словима, а ми смо извршили исте посредне операције над њима, добили бисмо следећи резултат.
Извођење операција филтрирања и сортирања на малим вредностима Пример
импорт јава.утил. Низови;
импорт јава.утил. Листа;
јавна класа Маин {
јавна статичка воид главна (Стринг [] аргс) {
// декларишу и иницијализују листу низова
Листа рандомВалуес = Арраис.асЛист (
"Е11", "Д12", "А13", "Ф14", "Ц15", "А16",
"Б11", "Б12", "ц13", "Б14", "Б15", "Б16",
"Ф12", "Е13", "Ц11", "Ц14", "А15", "ц16",
„Ф11“, „Ц12“, „Д13“, „Е14“, „Д15“, „Д16“
);
// преузима само вредности које почињу са Ц, сортира их и штампа на конзоли.
рандомВалуес.стреам (). филтер (валуе-> валуе.стартсВитх ("Ц")). сортед (). форЕацх (Систем.оут:: принтлн);
}
}
Горњи код ће у конзоли произвести следеће вредности:
Ц11
Ц12
Ц14
Ц15
Једини проблем горњег резултата је тај што не представља тачно све Ц. вредности на нашој листи низова. Добар начин да се поправи ова мала грешка је увођење још једне посредне операције у цевовод тока; ова операција је позната као Мапа() функцију.
Коришћење примера функције мапе
импорт јава.утил. Низови;
импорт јава.утил. Листа;
јавна класа Маин {
јавна статичка воид главна (Стринг [] аргс) {
// декларишу и иницијализују листу низова
Листа рандомВалуес = Арраис.асЛист (
"Е11", "Д12", "А13", "Ф14", "Ц15", "А16",
"Б11", "Б12", "ц13", "Б14", "Б15", "Б16",
"Ф12", "Е13", "Ц11", "Ц14", "А15", "ц16",
„Ф11“, „Ц12“, „Д13“, „Е14“, „Д15“, „Д16“
);
// трансформише све мале знакове у велика слова,
// преузима само вредности које почињу са Ц, сортира их и штампа на конзоли.
рандомВалуес.стреам (). мап (Стринг:: тоУпперЦасе) .филтер (валуе-> валуе.стартсВитх ("Ц")). сортед (). форЕацх (Систем.оут:: принтлн);
}
}
Тхе Мапа() функција трансформише објекат из једног стања у друго; у нашем примеру изнад трансформише све мале знакове на листи низова у велика слова.
Постављање Мапа() функција непосредно пре филтер () функција преузима све вредности које почињу са Ц. са листе низова.
Горњи код даје следећи резултат у конзоли, успешно представљајући све Ц. вредности на листи низова.
Ц11
Ц12
Ц13
Ц14
Ц15
Ц16
Остале три посредне операције које можете користити у својим апликацијама укључују:
- завирити ()
- лимит ()
- прескочи ()
Јава 8 токови олакшавају стварање ефикасног кода
Са Јава 8 токовима можете из једног извора кода из великог извора извући изузетно специфичне, релевантне податке. Све док укључите иницијал стреам () функцију и оператора терминала, можете користити било коју комбинацију посредних операција које пружају одговарајуће излазе за ваш циљ.
Ако се питате о линији кода која је затворена у нашем филтер () функција; познат је као „ламбда израз“. Ламбда изрази су још једна функција која је уведена са Јавом 8 и има пуно нуггетса који би вам могли бити корисни.
Ако сте Јава програмер и желите да сазнате више о ламбдама Јава 8, у овом чланку ћемо детаљније проучити синтаксу и употребу ламбда.
Прочитајте следеће
- Програмирање
- Јава
- Водичи за кодирање
Кадеисха Кеан је програмер софтвера у пуном слогу и писац техничких / технолошких технологија. Она има изразиту способност да поједностави неке од најсложенијих технолошких концепата; производећи материјал који лако може разумети било који технолошки новак. Одушевљена је писањем, развојем занимљивог софтвера и путовањем по свету (кроз документарне филмове).
Претплатите се на наш билтен
Придружите се нашем билтену за техничке савете, прегледе, бесплатне е-књиге и ексклузивне понуде!
Још један корак…!
Молимо потврдите своју адресу е-поште у е-поруци коју смо вам управо послали.