Elementen Transformeren met de map()-Methode
Je bent al bekend met het concept van intermediate operations in de Stream API. Deze operaties transformeren stream-elementen en retourneren een nieuwe stream zonder de originele stream te wijzigen. Een van deze methoden is map().
De map()-methode neemt een Function, die wordt toegepast op elk element in de stream. De resultaten worden verzameld in een nieuwe stream, terwijl de originele stream ongewijzigd blijft:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– het type elementen in de oorspronkelijke stream;R– het type elementen in de nieuwe stream (na transformatie).
In wezen geven we een type T door, dat wordt getransformeerd naar type R. Daarom gebruiken we map() wanneer het gegevenstype van een stream moet worden aangepast.
Praktische Toepassing
Stel dat een lijst met prijzen moet worden aangepast door op elke prijs 10% belasting toe te voegen. Dit is een veelvoorkomend scenario bij financiële berekeningen, zoals het toepassen van btw op productprijzen.
Main.java
1234567891011121314151617package com.example; import java.util.List; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Double> prices = Arrays.asList(100.0, 200.0, 50.0); // Apply a 10% tax to each price List<Double> finalPrices = prices.stream() .map(price -> price * 1.1) .toList(); System.out.println(finalPrices); } }
In dit voorbeeld wordt elke prijs in de lijst met 10% verhoogd met behulp van de map()-methode.
Elke waarde wordt vermenigvuldigd met 1,1 om rekening te houden met de belasting en de resultaten worden verzameld in een nieuwe lijst. Deze getransformeerde lijst kan vervolgens worden gebruikt voor verdere berekeningen, zoals het genereren van facturen of financiële rapporten.
Primitief Type
In tegenstelling tot de reguliere map-methode, die een stream van objecten retourneert, geven mapToInt(), mapToLong() en mapToDouble() streams van primitieve types terug, waardoor het geheugengebruik wordt verminderd en de prestaties worden verbeterd.
Praktisch voorbeeld
Het volgende voorbeeld zet een lijst van numerieke strings om in primitieve streams en print de waarden.
Main.java
1234567891011121314151617181920212223242526272829303132package com.example; import java.util.List; import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.DoubleStream; public class Main { public static void main(String[] args) { List<String> numbers = List.of("10", "20", "30", "40"); // Convert to `IntStream` IntStream intStream = numbers.stream() .mapToInt(Integer::parseInt); System.out.print("IntStream: "); intStream.forEach(n -> System.out.print(n + " ")); System.out.println(); // Convert to `LongStream` LongStream longStream = numbers.stream() .mapToLong(Long::parseLong); System.out.print("LongStream: "); longStream.forEach(n -> System.out.print(n + " ")); System.out.println(); // Convert to `DoubleStream` DoubleStream doubleStream = numbers.stream() .mapToDouble(Double::parseDouble); System.out.print("DoubleStream: "); doubleStream.forEach(n -> System.out.print(n + " ")); } }
Dit voorbeeld verwerkt een lijst van numerieke strings.
Eerst converteert mapToInt() de waarden naar een IntStream, waarbij elk getal als een integer wordt afgedrukt.
Vervolgens maakt mapToLong() een LongStream, waarbij dezelfde numerieke waarden behouden blijven maar in het type long.
Ten slotte transformeert mapToDouble() de gegevens naar een DoubleStream, waarbij de integers worden omgezet in decimale getallen.
Het gebruik van primitieve streams zorgt voor efficiënte verwerking van numerieke gegevens en voorkomt onnodige objectcreatie.
1. Wat doet de methode map() in de Stream API?
2. Welk type functionele interface moet de methode map() accepteren?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 2.33
Elementen Transformeren met de map()-Methode
Veeg om het menu te tonen
Je bent al bekend met het concept van intermediate operations in de Stream API. Deze operaties transformeren stream-elementen en retourneren een nieuwe stream zonder de originele stream te wijzigen. Een van deze methoden is map().
De map()-methode neemt een Function, die wordt toegepast op elk element in de stream. De resultaten worden verzameld in een nieuwe stream, terwijl de originele stream ongewijzigd blijft:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– het type elementen in de oorspronkelijke stream;R– het type elementen in de nieuwe stream (na transformatie).
In wezen geven we een type T door, dat wordt getransformeerd naar type R. Daarom gebruiken we map() wanneer het gegevenstype van een stream moet worden aangepast.
Praktische Toepassing
Stel dat een lijst met prijzen moet worden aangepast door op elke prijs 10% belasting toe te voegen. Dit is een veelvoorkomend scenario bij financiële berekeningen, zoals het toepassen van btw op productprijzen.
Main.java
1234567891011121314151617package com.example; import java.util.List; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Double> prices = Arrays.asList(100.0, 200.0, 50.0); // Apply a 10% tax to each price List<Double> finalPrices = prices.stream() .map(price -> price * 1.1) .toList(); System.out.println(finalPrices); } }
In dit voorbeeld wordt elke prijs in de lijst met 10% verhoogd met behulp van de map()-methode.
Elke waarde wordt vermenigvuldigd met 1,1 om rekening te houden met de belasting en de resultaten worden verzameld in een nieuwe lijst. Deze getransformeerde lijst kan vervolgens worden gebruikt voor verdere berekeningen, zoals het genereren van facturen of financiële rapporten.
Primitief Type
In tegenstelling tot de reguliere map-methode, die een stream van objecten retourneert, geven mapToInt(), mapToLong() en mapToDouble() streams van primitieve types terug, waardoor het geheugengebruik wordt verminderd en de prestaties worden verbeterd.
Praktisch voorbeeld
Het volgende voorbeeld zet een lijst van numerieke strings om in primitieve streams en print de waarden.
Main.java
1234567891011121314151617181920212223242526272829303132package com.example; import java.util.List; import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.DoubleStream; public class Main { public static void main(String[] args) { List<String> numbers = List.of("10", "20", "30", "40"); // Convert to `IntStream` IntStream intStream = numbers.stream() .mapToInt(Integer::parseInt); System.out.print("IntStream: "); intStream.forEach(n -> System.out.print(n + " ")); System.out.println(); // Convert to `LongStream` LongStream longStream = numbers.stream() .mapToLong(Long::parseLong); System.out.print("LongStream: "); longStream.forEach(n -> System.out.print(n + " ")); System.out.println(); // Convert to `DoubleStream` DoubleStream doubleStream = numbers.stream() .mapToDouble(Double::parseDouble); System.out.print("DoubleStream: "); doubleStream.forEach(n -> System.out.print(n + " ")); } }
Dit voorbeeld verwerkt een lijst van numerieke strings.
Eerst converteert mapToInt() de waarden naar een IntStream, waarbij elk getal als een integer wordt afgedrukt.
Vervolgens maakt mapToLong() een LongStream, waarbij dezelfde numerieke waarden behouden blijven maar in het type long.
Ten slotte transformeert mapToDouble() de gegevens naar een DoubleStream, waarbij de integers worden omgezet in decimale getallen.
Het gebruik van primitieve streams zorgt voor efficiënte verwerking van numerieke gegevens en voorkomt onnodige objectcreatie.
1. Wat doet de methode map() in de Stream API?
2. Welk type functionele interface moet de methode map() accepteren?
Bedankt voor je feedback!