1. Datenkonvertierung

Die Stream<T>Klasse verfügt außerdem über eine Methode, mit der Sie Daten von einem Typ in einen anderen konvertieren können. Diese Methode ist map().

Es gibt ebenfalls einen Stream zurück, jedoch mit Elementen eines anderen Typs. Die map()Methode verwendet als Methodenargument eine Funktion, die einen Datentyp in einen anderen konvertiert.

Beispiele:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Konvertieren eines IntegerStreams in einen StringStream

Das an die Methode übergebene Funktionsargument map()akzeptiert eine Zahl xund gibt deren Zeichenfolgendarstellung zurück. Übrigens können Sie diesen Code auch kompakter schreiben:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Konvertieren eines IntegerStreams in einen StringStream

Konvertieren einer Zeichenfolge in eine Zahl

Ebenso können Sie Code schreiben, um eine Zeichenfolge in eine Zahl umzuwandeln – auch das ist nicht kompliziert:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Konvertieren eines StringStreams in einen IntegerStream

Konvertieren einer Zeichenfolge in aURI

Datenkonvertierungsvorgänge können ressourcen- und zeitintensiv sein. Nehmen wir an, wir möchten eine Sammlung von Zeichenfolgen in URI-Objekte konvertieren. Dies ist sehr einfach zu bewerkstelligen, da der URI-Konstruktor einen String als Argument akzeptiert.

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 );
Konvertieren eines StringStreams in einen URIStream

Wir haben eine Sammlung erstellt und diese mit drei Webadressen gefüllt. Dann haben wir ein Stream<String>Objekt aus der Sammlung erhalten, und wiederum aus diesem Stream haben wir ein Stream<URI>Objekt erhalten. Wir haben der Map-Methode einen Verweis auf die Methode übergeben, die zum Konvertieren jedes Strings in einen URI verwendet wird.

Diese Methode (Konstruktor) muss a Stringals Argument annehmen. Alles scheint perfekt zu sein...


2. Ausnahmen

Wir könnten erwarten, dass der obige Code funktionieren sollte, aber das wird nicht der Fall sein – das Programm lässt sich nicht kompilieren. Und das nicht, weil wir irgendwo einen Fehler gemacht haben, sondern weil die Entwickler von Java Fehler gemacht haben.

Sie hatten einmal die brillante Idee, URISyntaxExceptiondem URIKlassenkonstruktor eine geprüfte Ausnahme ( ) hinzuzufügen! Und solche Ausnahmen müssen in eine gepackt werden try-catch.

Die letzte Zeile unseres Codes sieht also so aus:

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

Was können wir sagen? Sie sollten es sich zweimal überlegen, bevor Sie eine geprüfte Ausnahme verwenden . Und denken Sie dreimal darüber nach, bevor Sie sie in einem Konstruktor verwenden.