1. Pag-convert ng data

Ang Stream<T>klase ay mayroon ding paraan na hinahayaan kang mag-convert ng data mula sa isang uri patungo sa isa pa. Ang pamamaraang ito ay map().

Nagbabalik din ito ng stream, ngunit may mga elemento ng ibang uri. Ang map()pamamaraan ay tumatagal bilang argumento ng pamamaraan ng isang function na nagko-convert ng isang uri ng data sa isa pa.

Mga halimbawa:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Pag-convert ng Integerstream sa Stringstream

Ang argument ng function na ipinasa sa map()pamamaraan ay tumatagal ng isang numero xat ibinabalik ang representasyon ng string nito. Sa pamamagitan ng paraan, maaari mong isulat ang code na ito nang mas compact:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Pag-convert ng Integerstream sa Stringstream

Pag-convert ng string sa isang numero

Katulad nito, maaari kang magsulat ng code upang i-convert ang isang string sa isang numero — hindi rin ito kumplikado:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Pag-convert ng Stringstream sa Integerstream

Pag-convert ng string sa aURI

Ang mga pagpapatakbo ng conversion ng data ay maaaring maging masinsinang mapagkukunan at oras. Sabihin nating gusto naming i-convert ang isang koleksyon ng mga string sa mga bagay na URI. Ito ay napakadaling gawin, dahil ang URI constructor ay kumukuha ng isang string bilang argumento.

ArrayList<String> list = new ArrayList<String>();
list.add("https://google.com");
list.add("https://linkedin.com");
list.add("https://yandex.com");

Stream<URI> stream = list.stream().map( URI::new );
Pag-convert ng Stringstream sa URIstream

Gumawa kami ng koleksyon at nilagyan ito ng 3 web address. Pagkatapos ay nakakuha kami ng isang Stream<String>bagay mula sa koleksyon, at mula naman sa stream na iyon ay nakakuha kami ng isang Stream<URI>bagay. Ipinasa namin ang paraan ng mapa na isang sanggunian sa paraan na gagamitin upang i-convert ang bawat String sa isang URI.

Ang pamamaraang ito (tagabuo) ay dapat kumuha ng isang Stringbilang isang argumento. Ang lahat ay tila perpekto ...


2. Mga pagbubukod

Maaari naming asahan na ang code sa itaas ay dapat gumana, ngunit ito ay hindi — ang program ay hindi mag-compile. At hindi dahil nagkamali kami sa isang lugar, ngunit dahil nagkamali ang mga tagalikha ng Java.

Noong unang panahon, nagkaroon sila ng napakatalino na ideya ng pagdaragdag ng checked exception ( URISyntaxException) sa URIclass constructor! At ang gayong mga pagbubukod ay dapat na nakabalot sa isang try-catch.

Kaya ang huling linya ng aming code ay magiging ganito:

Stream<URI> stream = list.stream().map(str ->
{
  try
  {
     return new URI(str);
  }
  catch (URISyntaxException e)
  {
     e.printStackTrace();
     return null;
  }
});

Ano ang masasabi natin? Dapat kang mag-isip nang dalawang beses bago gumamit ng may check na exception . At mag-isip ng tatlong beses bago gamitin ang mga ito sa isang constructor.