1. Datakonvertering

Klassen Stream<T>har også en metode, der lader dig konvertere data fra en type til en anden. Denne metode er map().

Det returnerer også en strøm, men med elementer af en anden type. Metoden map()tager som et metodeargument en funktion, der konverterer en datatype til en anden.

Eksempler:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Konvertering af en Integerstrøm til en Stringstrøm

Funktionsargumentet, der sendes til map()metoden, tager et tal xog returnerer dets strengrepræsentation. Forresten kan du skrive denne kode mere kompakt:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Konvertering af en Integerstrøm til en Stringstrøm

Konvertering af en streng til et tal

På samme måde kan du skrive kode for at konvertere en streng til et tal - dette er heller ikke kompliceret:

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

Konvertering af en streng til enURI

Datakonverteringsoperationer kan være ressource- og tidskrævende. Lad os sige, at vi vil konvertere en samling af strenge til URI-objekter. Dette er meget nemt at gøre, fordi URI-konstruktøren tager en streng som et 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 );
Konvertering af en Stringstrøm til en URIstrøm

Vi oprettede en samling og udfyldte den med 3 webadresser. Så fik vi en Stream<String>genstand fra samlingen, og til gengæld fra den strøm fik vi en Stream<URI>genstand. Vi gav kortmetoden en reference til den metode, der vil blive brugt til at konvertere hver streng til en URI.

Denne metode (konstruktør) skal tage a Stringsom et argument. Alt ser ud til at være perfekt...


2. Undtagelser

Vi kunne forvente, at koden ovenfor skulle virke, men det vil den ikke – programmet vil ikke kompilere. Og ikke fordi vi lavede en fejl et eller andet sted, men fordi Javas skabere rodede.

Engang havde de den geniale idé at tilføje en markeret undtagelse ( URISyntaxException) til URIklassekonstruktøren! Og sådanne undtagelser skal pakkes ind i en try-catch.

Så den sidste linje i vores kode vil se sådan ud:

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

Hvad kan vi sige? Du bør tænke dig om to gange, før du bruger en markeret undtagelse . Og tænk dig om tre gange, før du bruger dem i en konstruktør.