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));
Integer
ström till en String
ström
Funktionsargumentet som skickas till map()
metoden tar ett tal x
och 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);
Integer
ström till en String
strö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);
String
ström till en Integer
strö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 );
String
ström till en URI
strö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 String
som 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 ( ) URISyntaxException
till URI
klasskonstruktorn! 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.
GO TO FULL VERSION