1. Datakonvertering

Klassen Stream<T>har ocksÄ en metod som lÄter dig konvertera data frÄn en typ till en annan. Denna metod Àr map().

Den returnerar ocksÄ en ström, men med element av en annan typ. Metoden map()tar som ett metodargument en funktion som konverterar en datatyp till en annan.

Exempel:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Konvertera en Integerström till en Stringström

Funktionsargumentet som skickas till map()metoden tar ett tal xoch returnerar dess strÀngrepresentation. Förresten, du kan skriva den hÀr koden mer kompakt:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Konvertera en Integerström till en Stringström

Konvertera en strÀng till ett tal

PÄ samma sÀtt kan du skriva kod för att konvertera en strÀng till ett tal - det hÀr Àr inte heller komplicerat:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Konvertera en Stringström till en Integerström

Konvertera en strÀng till enURI

Datakonverteringsoperationer kan vara resurskrÀvande och tidskrÀvande. LÄt oss sÀga att vi vill konvertera en samling strÀngar till URI-objekt. Detta Àr mycket enkelt att göra, eftersom URI-konstruktorn tar en strÀng som ett argument.

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 );
Konvertera en Stringström till en URIström

Vi skapade en samling och fyllde den med 3 webbadresser. Sedan fick vi ett Stream<String>föremÄl frÄn samlingen, och i sin tur frÄn den strömmen fick vi ett Stream<URI>föremÄl. Vi skickade kartmetoden en referens till metoden som kommer att anvÀndas för att konvertera varje strÀng till en URI.

Denna metod (konstruktör) mÄste ta a Stringsom ett argument. Allt verkar vara perfekt...


2. Undantag

Vi kan förvĂ€nta oss att koden ovan ska fungera, men det kommer den inte att göra – programmet kompilerar inte. Och inte för att vi gjorde ett misstag nĂ„gonstans, utan för att Javas skapare trasslade till.

En gÄng i tiden hade de den briljanta idén att lÀgga till ett markerat undantag ( ) URISyntaxExceptiontill URIklasskonstruktorn! Och sÄdana undantag mÄste lindas in i en try-catch.

SÄ den sista raden i vÄr kod kommer att se ut sÄ hÀr:

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

Vad kan vi sÀga? Du bör tÀnka tvÄ gÄnger innan du anvÀnder ett markerat undantag . Och tÀnk efter tre gÄnger innan du anvÀnder dem i en konstruktor.