Трансформація Елементів за Допомогою Методу map()
Ви вже знайомі з поняттям проміжних операцій у Stream API. Ці операції перетворюють елементи потоку та повертають новий потік, не змінюючи оригінальний. Одним із таких методів є map().
Метод map() приймає Function, яка застосовується до кожного елемента у потоці. Результати збираються в новий потік, тоді як оригінальний потік залишається незмінним:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– тип елементів у початковому потоці;R– тип елементів у новому потоці (після трансформації).
Фактично, ми передаємо тип T, який перетворюється на тип R. Саме тому використовується map(), коли потрібно змінити тип даних у потоці.
Практичне застосування
Наприклад, потрібно скоригувати список цін, додавши до кожної 10% податку. Це типовий випадок у фінансових розрахунках, наприклад, при застосуванні податку з продажу до цін товарів.
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); } }
У цьому прикладі кожна ціна у списку збільшується на 10% за допомогою методу map().
Кожне значення множиться на 1.1 для врахування податку, а результати збираються у новий список. Цей перетворений список можна використовувати для подальших обчислень, наприклад, для створення рахунків або фінансових звітів.
Примітивний тип
На відміну від звичайного методу map, який повертає stream об'єктів, mapToInt(), mapToLong() та mapToDouble() повертають streams примітивних типів, що зменшує витрати пам'яті та підвищує продуктивність.
Практичний приклад
У наступному прикладі список числових рядків перетворюється на примітивні потоки та виводить значення.
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 + " ")); } }
Цей приклад обробляє список числових рядків.
Спочатку mapToInt() перетворює значення у IntStream, виводячи кожне число як ціле число.
Далі, mapToLong() створює LongStream, зберігаючи ті самі числові значення, але у типі long.
Нарешті, mapToDouble() перетворює дані у DoubleStream, конвертуючи цілі числа у десяткові числа.
Використання примітивних потоків забезпечує ефективну обробку числових даних та уникає непотрібного створення об'єктів.
1. Що робить метод map() у Stream API?
2. Який тип функціонального інтерфейсу повинен приймати метод map()?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 2.33
Трансформація Елементів за Допомогою Методу map()
Свайпніть щоб показати меню
Ви вже знайомі з поняттям проміжних операцій у Stream API. Ці операції перетворюють елементи потоку та повертають новий потік, не змінюючи оригінальний. Одним із таких методів є map().
Метод map() приймає Function, яка застосовується до кожного елемента у потоці. Результати збираються в новий потік, тоді як оригінальний потік залишається незмінним:
Stream<T> map(Function<? super T, ? extends R> mapper);
T– тип елементів у початковому потоці;R– тип елементів у новому потоці (після трансформації).
Фактично, ми передаємо тип T, який перетворюється на тип R. Саме тому використовується map(), коли потрібно змінити тип даних у потоці.
Практичне застосування
Наприклад, потрібно скоригувати список цін, додавши до кожної 10% податку. Це типовий випадок у фінансових розрахунках, наприклад, при застосуванні податку з продажу до цін товарів.
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); } }
У цьому прикладі кожна ціна у списку збільшується на 10% за допомогою методу map().
Кожне значення множиться на 1.1 для врахування податку, а результати збираються у новий список. Цей перетворений список можна використовувати для подальших обчислень, наприклад, для створення рахунків або фінансових звітів.
Примітивний тип
На відміну від звичайного методу map, який повертає stream об'єктів, mapToInt(), mapToLong() та mapToDouble() повертають streams примітивних типів, що зменшує витрати пам'яті та підвищує продуктивність.
Практичний приклад
У наступному прикладі список числових рядків перетворюється на примітивні потоки та виводить значення.
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 + " ")); } }
Цей приклад обробляє список числових рядків.
Спочатку mapToInt() перетворює значення у IntStream, виводячи кожне число як ціле число.
Далі, mapToLong() створює LongStream, зберігаючи ті самі числові значення, але у типі long.
Нарешті, mapToDouble() перетворює дані у DoubleStream, конвертуючи цілі числа у десяткові числа.
Використання примітивних потоків забезпечує ефективну обробку числових даних та уникає непотрібного створення об'єктів.
1. Що робить метод map() у Stream API?
2. Який тип функціонального інтерфейсу повинен приймати метод map()?
Дякуємо за ваш відгук!