1. Datakonvertering
Klassen Stream<T>har også en metode som lar deg konvertere data fra en type til en annen. Denne metoden er map().
Den returnerer også en strøm, men med elementer av en annen type. Metoden map()tar som et metodeargument en funksjon som konverterer en datatype til en annen.
Eksempler:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Integerstrøm til en Stringstrøm
Funksjonsargumentet som sendes til map()metoden tar et tall xog returnerer strengrepresentasjonen. Forresten, du kan skrive denne koden mer kompakt:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Integerstrøm til en Stringstrøm
Konvertere en streng til et tall
På samme måte kan du skrive kode for å konvertere en streng til et tall - dette er heller ikke komplisert:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Stringstrøm til en Integerstrøm
Konvertere en streng til enURI
Datakonverteringsoperasjoner kan være ressurs- og tidskrevende. La oss si at vi ønsker å konvertere en samling strenger til URI-objekter. Dette er veldig enkelt å gjøre, fordi URI-konstruktøren tar 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 );
Stringstrøm til en URIstrøm
Vi opprettet en samling og fylte den med 3 nettadresser. Så fikk vi en Stream<String>gjenstand fra samlingen, og i sin tur fra den bekken fikk vi en Stream<URI>gjenstand. Vi ga kartmetoden en referanse til metoden som skal brukes til å konvertere hver streng til en URI.
Denne metoden (konstruktøren) må ta a Stringsom et argument. Alt ser ut til å være perfekt...
2. Unntak
Vi kan forvente at koden ovenfor skal fungere, men den vil ikke - programmet vil ikke kompilere. Og ikke fordi vi gjorde en feil et sted, men fordi Javas skapere rotet til.
En gang i tiden hadde de den geniale ideen om å legge til et avkrysset unntak ( URISyntaxException) til URIklassekonstruktøren! Og slike unntak må pakkes inn i en try-catch.
Så den siste linjen i koden vår vil se slik ut:
Stream<URI> stream = list.stream().map(str ->
{
try
{
return new URI(str);
}
catch (URISyntaxException e)
{
e.printStackTrace();
return null;
}
});
Hva kan vi si? Du bør tenke deg om to ganger før du bruker et avkrysset unntak . Og tenk tre ganger før du bruker dem i en konstruktør.
GO TO FULL VERSION