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));
Integer
Streams in einen
String
Stream
Das an die Methode übergebene Funktionsargument map()
akzeptiert eine Zahl x
und 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);
Integer
Streams in einen
String
Stream
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);
String
Streams in einen
Integer
Stream
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 );
String
Streams in einen
URI
Stream
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 String
als 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, URISyntaxException
dem URI
Klassenkonstruktor 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.
GO TO FULL VERSION