IJava 8 Imijelo yokuFundisa enemizekelo yeKhowudi

Kule posti yebhlog, siza kuxoxa ngeempawu zemijelo yeJava 8 kwaye sinike imizekelo eyahlukeneyo yekhowudi.

Imijelo yeJava izisa inkqubo esebenzayo kwiJava kwaye ziyaxhaswa ukuqala kwiJava 8 ke ukuba unenguqulo endala yeJava, kuya kufuneka uphucule uye kuJava 8 ukuze usebenzise iJava Streams.



Kutheni usebenzisa iMijelo yeJava?

Ezinye zezibonelelo zemijelo:


  • Imijelo iya kukwenza ukuba ube yinkqubo esebenzayo ngakumbi yeJava (uya kubona ukuba ngemigca embalwa kakhulu yekhowudi ungafezekisa okuninzi usebenzisa imilambo).
  • Basebenzisa kakhulu intetho ye-lambda eluhlobo lwemisebenzi enokulahlwa.
  • I-ParallelStreams yenza ukuba imisebenzi enemisonto emininzi iseti yedatha enkulu ngokulula.


Umbhobho wemijelo

Kwiimeko ezininzi, umbhobho wemijelo uqukethe

  • imvelaphi (apho idatha yakho iphuma khona)
  • kulandele zero okanye nangaphezulu ukusebenza okuphakathi
  • kunye nenye Umsebenzi wesiphelo

Imijelo yeJava-Icebo lokucoca ulwelo, Imephu, ukunciphisa


Umthombo uza kusasaza umjelo wezinto.



Lo mjelo wezinto unokucocwa, ulungiswe, okanye unokubhalwa kwimephu okanye kolunye uluhlu lwemisebenzi esetyenzisiweyo kwinto nganye.

Ekugqibeleni, inokuqokelelwa okanye incitshiswe okanye enye intsebenzo yesiphelo kodwa inye kuphela imisebenzi yesiphelo eyenziweyo.

Umthombo woMjelo

Umthombo wokusasaza inokuvela kwingqokelela, uluhlu, iiseti, uluhlu lwe-int, ubude, ukuphinda kabini, imitya, njl.


Imisebenzi yoSasazo

Imisebenzi yokusasaza ziphakathi okanye zinesiphelo:

  • Umsebenzi ophakathi ezinje ngecebo lokucoca ulwelo, imephu, okanye uhlobo olubuyisela umjelo ukuze sikwazi ukudibanisa imisebenzi emininzi ephakathi.
  • Imisebenzi yesiphelo ukufumana umlambo kwaye banokubuyisa into engekhoyo okanye banokubuyisa iziphumo ezingashukumi njengokuncitshiswa, o.k.t. ukunciphisa izinto kuluhlu.

Ukusebenza okuPhakathi

  • Ukungabikho komsebenzi ongaphezulu okanye okungaphezulu kuyavunyelwa.
  • Imicimbi yoku-odola; yedatha enkulu: isihluzo kuqala emva koko uhlele okanye imephu.
  • Kwiidasethi ezinkulu kakhulu kuthi ParallelStream ukwenza imisonto emininzi.

Eminye yemisebenzi ephakathi ibandakanya:

  • nayiphi na iMatch ()
  • eyahlukileyo ()
  • isihluzo ()
  • fumanaFirst ()
  • iflethi ()
  • imephu ()
  • tsiba ()
  • ihlelwe ()

Ukusebenza kweTheminali

Ukufumana kuphela ukuphela kwesiphelo kuvunyelwe.

  • forEach isebenza ngokufanayo kwinto nganye umzekelo phrinta into nganye.
  • Ukuqokelela kugcina zonke izinto kwingqokelela okanye kuluhlu okanye kuluhlu.
  • Zonke ezinye iinketho zinciphisa umsinga ukuya kwisishwankathelo esinye.

Eminye imizekelo yokunciphisa imisebenzi yile:


  • ukubala ()
  • ubuninzi ()
  • imizuzu ()
  • ukunciphisa ()


Imijelo yeKhowudi yeJava

Ngoku makhe sijonge ezi ngcamango zingasentla kwimizekelo yekhowudi.

Ukusasazeka okupheleleyo

Umzekelo wokuqala ngumjelo opheleleyo. Siza kwenza umjelo opheleleyo usebenzisa IntStream iklasi kunye nomsebenzi wayo osebenza kuwo osinika uluhlu lwamanani apheleleyo.

I forEach kukusebenza kwethu kwesiphelo. Kwinto nganye, siza kuyiprinta.

import java.io.IOException; import java.util.stream.IntStream; public class JavaStreams {
public static void main(String[] args) throws IOException {
IntStream

.range(1, 10)

.forEach(System.out::print);
System.out.println();
} }

Iziphumo:


123456789

Ukusasazeka okupheleleyo ngeSkip

Umzekelo wesibini usebenzisa umjelo opheleleyo kodwa songeze skip() apha, ke kule meko, siza kutsiba izinto zokuqala ezi-5 zomjelo wethu.

Oku kuyakuba kukuprinta kuphela izinto ezi-6 ukuya ku-9. Sikwasebenzisa ibinzana elilula le-lambda ukuprinta into

import java.io.IOException; import java.util.stream.IntStream; public class JavaStreams {
public static void main(String[] args) throws IOException {
IntStream

.range(1, 10)

.skip(5)

.forEach(x -> System.out.println(x));
System.out.println();
} }

Iziphumo:

6 7 8 9

Ukusasazeka okupheleleyo ngeSum

Umzekelo wesithathu, siphinda sisebenzise IntStream ukwenza umjelo wethu wezinto nangona kunjalo, sibeka loo nto ngaphakathi println() ingxelo njengeparameter yomgca wokuprinta.


Into esiza kuyiprinta sisishwankathelo esisuka ku-1 ukuya ku-5 ngamanye amagama, 1 2 3 & 4 izakuprinta kuphela inani lala manani:

import java.io.IOException; import java.util.stream.IntStream; public class JavaStreams {
public static void main(String[] args) throws IOException {
System.out.println(
IntStream

.range(1, 5)

.sum());
System.out.println();
} }

Iziphumo:

10

Umjelo

Umzekelo olandelayo usebenzisa Stream.of function, eluncedo ngenene kuba unokusasaza amanani apheleleyo, amaxabiso encopho yokudada okanye imitya okanye izinto.

Kulo mzekelo, siza kwenza uhlobo oluchanekileyo loonobumba emva koko siza kufumana into yokuqala sisebenzisa findFirst() umsebenzi. Emva koko, siprinta into yokuqala kuluhlu.

import java.io.IOException; import java.util.stream.Stream; public class JavaStreams {
public static void main(String[] args) throws IOException {
Stream.of('Ava', 'Aneri', 'Alberto')

.sorted()

.findFirst()

.ifPresent(System.out::println);
} }

Iziphumo

Alberto

Sakaza kuluhlu, uhlobo, isihluzo kunye nokuprinta

Kumzekelo wethu olandelayo, siza kusasaza kuludwe. Emva koko siza kuhlela, ukucoca kunye nokuprinta.

Apha, siza kucoca izinto kuphela eziqala nge s.

Sisebenzisa intetho ye-lambda engena X eligama ngalinye emva koko likhangele ukuba leliphi eliqala ngonobumba s kwaye iya kudlula abo.

Emva koko siza kuzihlela kwaye emva kwento nganye edlulayo olohlobo siza kuyiprinta.

import java.io.IOException; import java.util.Arrays; public class JavaStreams {
public static void main(String[] args) throws IOException {
String[] names = {'Al', 'Ankit', 'Kushal', 'Brent', 'Sarika', 'amanda', 'Hans', 'Shivika', 'Sarah'};
Arrays.stream(names)


.filter(x -> x.startsWith('S'))


.sorted()


.forEach(System.out::println);
} }

Iziphumo:

Sarah Sarika Shivika

Umndilili wenani elipheleleyo

Ngoku makhe sijonge indlela esinokuwuthatha ngayo umndilili wezikwere kuluhlu lwe-int.

Apha, sisebenzisa Arrays.stream() Umsebenzi wokuhambisa amanani apheleleyo kwaye siza kusebenzisa map() ukwenza imephu yento nganye kwinani elipheleleyo kwisikwere sayo.

import java.util.Arrays; public class JavaStreams {
public static void main(String[] args) {
Arrays.stream(new int[] {2, 4, 6, 8, 10})


.map(x -> x * x)


.average()


.ifPresent(System.out::println);
} }

Iziphumo:

44.0

Qaphela ukuba iprinta kabini endaweni yenani elipheleleyo.

Sakaza kuLuhlu, isihluzo kunye nokuprinta

Kulo mzekelo, siza kusasaza kuluhlu, ucofe ezo zinto emva koko uprinte.

Qaphela ukuba ngaphakathi map() Umsebenzi, siza kuguqula onke amagama abe ngonobumba abancinci.

import java.util.Arrays; import java.util.List; public class JavaStreams {
public static void main(String[] args) {
List people = Arrays.asList('Al', 'Ankit', 'Brent', 'Sarika', 'amanda', 'Hans', 'Shivika', 'Sarah');
people


.stream()


.map(String::toLowerCase)


.filter(x -> x.startsWith('a'))


.forEach(System.out::println);
} }

Iziphumo:

al ankit amanda

Siyabona ukuba sinamagama amathathu aqala ngo a kwaye zonke zikwikhasi elincinci.

Sasaza imiqolo kwifayile yokubhaliweyo, uhlobo, isihluzo kunye nokuprinta

Kumzekelo wethu olandelayo, siza kusasaza imiqolo kwifayile yokubhaliweyo. Siza kuhlela, sihlunge kwaye siprinte.

Masicinge ukuba sinefayile ebizwa bands.txt nemixholo eboniswe ngezantsi:

Rolling Stones Lady Gaga Jackson Browne Maroon 5 Arijit Singh Elton John John Mayer CCR Eagles Pink Aerosmith Adele Taylor Swift

Siza kusebenzisa Files.lines() ukwenza umjelo wethu oza kusinika umjelo womtya kumgca ngamnye wefayile.

Nje ukuba sibe nomsinga wethu, siza kuzihlela kwaye siza kucoca izinto ezingaphezulu kweempawu ezili-13 emva koko siprinte izinto ezishiyekileyo.

Okokugqibela, kufuneka siyivale ifayile ukuze senze bands.close.

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Stream; public class JavaStreams {
public static void main(String[] args) throws IOException {
Stream bands = Files.lines(Paths.get('bands.txt'));
bands


.sorted()


.filter(x -> x.length() > 13)


.forEach(System.out::println);
bands.close();
} }

Iziphumo:

Jackson Browne Rolling Stones

Sifumana iibhendi ezimbini ezinabalinganiswa abangaphezulu kwe-13.

Sasaza imiqolo ukusuka kwifayile yokubhaliweyo kwaye ugcine kuLuhlu

Kulo mzekelo, siya kusebenzisa ifayile yokubhaliweyo efanayo njengasentla.

Sifuna ukucoca izinto ezinonobumba jit, usebenzisa x.contains() ongumsebenzi nje wentambo.

Sebenzisa .collect() Sizongeza zonke ngoonobumba jit kuluhlu.

Nje ukuba sikhuphe uluhlu, singasebenzisa forEach oprinta izinto.

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; public class JavaStreams {
public static void main(String[] args) throws IOException {
List bands2 = Files.lines(Paths.get('bands.txt'))


.filter(x -> x.contains('jit'))


.collect(Collectors.toList());
bands2.forEach(x -> System.out.println(x));
} }

Iziphumo:

Arijit Singh

Sasaza imiqolo ukusuka kwifayile ye-CSV kunye nokubala

Kulo mzekelo, sisasaza imiqolo kwifayile ye-CSV kwaye siza kubala imiqolo elungileyo.

Masithi sinefayile ebizwa ngokuba data.txt ngezi ziqulatho zilandelayo:

A,12,3.7 B,17,2.8 C,14,1.9 D,23,2.7 E F,18,3.4

Apha umqolo E awunayo idatha, ke sifuna ukuyikhuphela ngaphandle kumsinga wethu.

Kule khowudi ilandelayo, siza kufunda kumqolo ngamnye emva koko kufuneka sahlule kwiikoma zibe kuluhlu ukuze umqolo ngamnye ube luluhlu lwezinto.

Emva koko sisebenzisa icebo lokucoca ulwelo ukucoca imigca engenazinto zintathu.

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Stream; public class JavaStreams {
public static void main(String[] args) throws IOException {
Stream rows1 = Files.lines(Paths.get('data.txt'));
int rowCount = (int)rows1


.map(x -> x.split(','))


.filter(x -> x.length == 3)


.count();
System.out.println(rowCount + ' rows.');
rows1.close();
} }

Iziphumo:

5 rows

Ukunciphisa - isixa

Lo mzekelo ukubonisa indlela yokusebenzisa ukunciphisa. Siza kunciphisa ukuya kwisixa. Apha, sinomjelo ophindwe kabini sisebenzisa Stream.of() umsebenzi. Sichaze ukuphindeka kathathu kwiingxoxo ezintathu ezahlukeneyo kwaye siza kusebenzisa ukunciphisa umsebenzi.

import java.util.stream.Stream; public class JavaStreams {
public static void main(String[] args) {
double total = Stream.of(7.3, 1.5, 4.8)


.reduce(0.0, (Double a, Double b) -> a + b);
System.out.println('Total = ' + total);
} }

Iziphumo:

13.600000000000001