Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Трансформація Елементів за Допомогою Методу map() | Проміжні Операції у Stream API
Stream API

bookТрансформація Елементів за Допомогою Методу map()

Ви вже знайомі з поняттям проміжних операцій у Stream API. Ці операції перетворюють елементи потоку та повертають новий потік, не змінюючи оригінальний. Одним із таких методів є map().

Метод map() приймає Function, яка застосовується до кожного елемента у потоці. Результати збираються в новий потік, тоді як оригінальний потік залишається незмінним:

Stream<T> map(Function<? super T, ? extends R> mapper);
  • T – тип елементів у початковому потоці;
  • R – тип елементів у новому потоці (після трансформації).

Фактично, ми передаємо тип T, який перетворюється на тип R. Саме тому використовується map(), коли потрібно змінити тип даних у потоці.

Практичне застосування

Наприклад, потрібно скоригувати список цін, додавши до кожної 10% податку. Це типовий випадок у фінансових розрахунках, наприклад, при застосуванні податку з продажу до цін товарів.

Main.java

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011121314151617181920212223242526272829303132
package 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()?

question mark

Що робить метод map() у Stream API?

Select the correct answer

question mark

Який тип функціонального інтерфейсу повинен приймати метод map()?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 2.33

bookТрансформація Елементів за Допомогою Методу map()

Свайпніть щоб показати меню

Ви вже знайомі з поняттям проміжних операцій у Stream API. Ці операції перетворюють елементи потоку та повертають новий потік, не змінюючи оригінальний. Одним із таких методів є map().

Метод map() приймає Function, яка застосовується до кожного елемента у потоці. Результати збираються в новий потік, тоді як оригінальний потік залишається незмінним:

Stream<T> map(Function<? super T, ? extends R> mapper);
  • T – тип елементів у початковому потоці;
  • R – тип елементів у новому потоці (після трансформації).

Фактично, ми передаємо тип T, який перетворюється на тип R. Саме тому використовується map(), коли потрібно змінити тип даних у потоці.

Практичне застосування

Наприклад, потрібно скоригувати список цін, додавши до кожної 10% податку. Це типовий випадок у фінансових розрахунках, наприклад, при застосуванні податку з продажу до цін товарів.

Main.java

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011121314151617181920212223242526272829303132
package 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()?

question mark

Що робить метод map() у Stream API?

Select the correct answer

question mark

Який тип функціонального інтерфейсу повинен приймати метод map()?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 1
some-alt