Transformering af elementer med map()-metoden
Du er allerede bekendt med begrebet mellemoperationer i Stream API. Disse operationer transformerer elementer i en stream og returnerer en ny stream uden at ændre den oprindelige. En sådan metode er map().
Metoden map() tager en Function, som anvendes på hvert element i streamen. Resultaterne samles i en ny stream, mens den oprindelige stream forbliver uændret:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– typen af elementer i den oprindelige stream;R– typen af elementer i den nye stream (efter transformation).
Grundlæggende sender vi en type T, som bliver transformeret til typen R. Derfor anvendes map(), når det er nødvendigt at ændre datatype for en stream.
Praktisk anvendelse
Antag, at du skal justere en liste af priser ved at tilføje 10% moms til hver enkelt. Dette er et almindeligt scenarie i finansielle beregninger, såsom at pålægge moms på produktpriser.
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); } }
I dette eksempel øges hver pris i listen med 10% ved hjælp af map()-metoden.
Hver værdi ganges med 1,1 for at inkludere moms, og resultaterne samles i en ny liste. Denne transformerede liste kan derefter anvendes til yderligere beregninger, såsom oprettelse af fakturaer eller finansielle rapporter.
Primitiv type
I modsætning til den almindelige map-metode, som returnerer en stream af objekter, returnerer mapToInt(), mapToLong() og mapToDouble() streams af primitivtyper, hvilket reducerer hukommelsesforbrug og forbedrer ydelse.
Praktisk eksempel
Følgende eksempel konverterer en liste af numeriske strenge til primitiv streams og udskriver værdierne.
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 + " ")); } }
Dette eksempel behandler en liste af numeriske strenge.
Først konverterer mapToInt() værdierne til en IntStream, hvor hver værdi udskrives som et heltal.
Dernæst opretter mapToLong() en LongStream, hvor de samme numeriske værdier bevares, men i typen long.
Til sidst transformerer mapToDouble() dataene til en DoubleStream, hvor heltallene konverteres til decimaltal.
Brug af primitiv streams sikrer effektiv håndtering af numeriske data og undgår unødvendig objektoprettelse.
1. Hvad gør map()-metoden i Stream API?
2. Hvilken type funktionelt interface skal map()-metoden acceptere?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 2.33
Transformering af elementer med map()-metoden
Stryg for at vise menuen
Du er allerede bekendt med begrebet mellemoperationer i Stream API. Disse operationer transformerer elementer i en stream og returnerer en ny stream uden at ændre den oprindelige. En sådan metode er map().
Metoden map() tager en Function, som anvendes på hvert element i streamen. Resultaterne samles i en ny stream, mens den oprindelige stream forbliver uændret:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– typen af elementer i den oprindelige stream;R– typen af elementer i den nye stream (efter transformation).
Grundlæggende sender vi en type T, som bliver transformeret til typen R. Derfor anvendes map(), når det er nødvendigt at ændre datatype for en stream.
Praktisk anvendelse
Antag, at du skal justere en liste af priser ved at tilføje 10% moms til hver enkelt. Dette er et almindeligt scenarie i finansielle beregninger, såsom at pålægge moms på produktpriser.
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); } }
I dette eksempel øges hver pris i listen med 10% ved hjælp af map()-metoden.
Hver værdi ganges med 1,1 for at inkludere moms, og resultaterne samles i en ny liste. Denne transformerede liste kan derefter anvendes til yderligere beregninger, såsom oprettelse af fakturaer eller finansielle rapporter.
Primitiv type
I modsætning til den almindelige map-metode, som returnerer en stream af objekter, returnerer mapToInt(), mapToLong() og mapToDouble() streams af primitivtyper, hvilket reducerer hukommelsesforbrug og forbedrer ydelse.
Praktisk eksempel
Følgende eksempel konverterer en liste af numeriske strenge til primitiv streams og udskriver værdierne.
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 + " ")); } }
Dette eksempel behandler en liste af numeriske strenge.
Først konverterer mapToInt() værdierne til en IntStream, hvor hver værdi udskrives som et heltal.
Dernæst opretter mapToLong() en LongStream, hvor de samme numeriske værdier bevares, men i typen long.
Til sidst transformerer mapToDouble() dataene til en DoubleStream, hvor heltallene konverteres til decimaltal.
Brug af primitiv streams sikrer effektiv håndtering af numeriske data og undgår unødvendig objektoprettelse.
1. Hvad gør map()-metoden i Stream API?
2. Hvilken type funktionelt interface skal map()-metoden acceptere?
Tak for dine kommentarer!