Alkioiden Muuntaminen Map()-Metodilla
Pyyhkäise näyttääksesi valikon
Olet jo perehtynyt välitoimintojen käsitteeseen Stream API:ssa. Nämä toiminnot muuntavat virtauksen alkioita ja palauttavat uuden virtauksen muuttamatta alkuperäistä. Yksi tällainen metodi on map().
Metodi map() ottaa vastaan Function-funktion, jota sovelletaan jokaiseen alkioon virrassa. Tulokset kerätään uuteen virtaukseen, kun taas alkuperäinen virta säilyy muuttumattomana:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– alkuperäisen virran alkioiden tyyppi;R– uuden virran alkioiden tyyppi (muunnoksen jälkeen).
Käytännössä annetaan tyyppi T, joka muunnetaan tyypiksi R. Siksi käytetään map()-metodia, kun täytyy muuttaa virran datan tyyppiä.
Käytännön sovellus
Oletetaan, että täytyy muokata hintalistaa lisäämällä jokaiseen hintaan 10 % vero. Tämä on yleinen tilanne talouslaskelmissa, kuten arvonlisäveron lisääminen tuotteiden hintoihin.
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); } }
Tässä esimerkissä jokainen hinta listassa kasvatetaan 10 % käyttämällä map()-metodia.
Jokainen arvo kerrotaan 1.1:llä veron huomioimiseksi ja tulokset kerätään uuteen listaan. Tätä muunnettua listaa voidaan käyttää jatko-laskelmissa, kuten laskujen tai talousraporttien laatimisessa.
Primitivityyppi
Toisin kuin tavallinen map-metodi, joka palauttaa olioiden streamin, mapToInt(), mapToLong() ja mapToDouble() palauttavat primitivityyppien streamit, mikä vähentää muistikuormitusta ja parantaa suorituskykyä.
Käytännön esimerkki
Seuraava esimerkki muuntaa numeeristen merkkijonojen listan primitivestreamiksi ja tulostaa arvot.
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 + " ")); } }
Tämä esimerkki käsittelee numeeristen merkkijonojen listaa.
Ensin mapToInt() muuntaa arvot IntStream-virraksi, tulostaen jokaisen luvun kokonaislukuna.
Seuraavaksi mapToLong() luo LongStream-virran, säilyttäen samojen numeeristen arvojen tyypin long-muotoisena.
Lopuksi mapToDouble() muuntaa datan DoubleStream-virraksi, muuntaen kokonaisluvut desimaaliluvuiksi.
Primitiivivirtojen käyttö takaa tehokkaan numeerisen datan käsittelyn ja välttää tarpeettoman olioiden luonnin.
1. Mitä map()-metodi tekee Stream API:ssa?
2. Minkä tyyppinen funktionaalinen rajapinta map()-metodin tulee hyväksyä?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme