Метод map() используется для преобразования данных. Если filter сокращает количество элементов, то map изменяет сами элементы, сохраняя их количество. Он принимает функцию, которая применяется к каждому элементу потока.
Пример: .map(String::toUpperCase) превратит все строки в верхний регистр. Часто тип данных на выходе меняется: например, из потока строк мы получаем поток чисел (длин этих строк). Это основа паттерна Map-Reduce. Проходя эти уроки, вы научитесь трансформировать данные на лету, используя компактный и читаемый код.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Выбор преобразования
В данном задании представлен фрагмент кода на Java, который работает со списком объектов класса Person. Класс Person имеет поля: name (имя), age (возраст), salary (зарплата) и соответствующие геттеры. Вам необходимо заполнить пропуски в коде, выбрав из выпадающих списков правильный метод преобразования Stream API и соответствующую ссылку на метод-геттер, чтобы получить список имён сотрудников. Обратите внимание, что для преобразования потока объектов в поток их имён используется операция map, а в качестве маппера — ссылка на метод, возвращающий нужное поле.
import java.util.List;
import java.util.stream.Collectors;
class Person {
private String name;
private int age;
private double salary;
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() { return name; }
public int getAge() { return age; }
public double getSalary() { return salary; }
}
public class Main {
public static void main(String[] args) {
List<Person> employees = List.of(
new Person("Alice", 30, 50000),
new Person("Bob", 25, 45000),
new Person("Charlie", 35, 60000)
);
// Получить список имён сотрудников
List<String> names = employees.stream()
.input1S(input2S)
.collect(Collectors.toList());
System.out.println(names);
}
}2. Математика в map
В этом задании вам предстоит поработать с методом map из Stream API в Java. Дан поток целых чисел. Вам нужно дополнить лямбда-выражение внутри метода map так, чтобы каждое число потока возводилось в квадрат. Обратите внимание, что в лямбде используется параметр n, представляющий текущий элемент потока. После правильного заполнения пропуска программа должна вывести квадраты чисел 1, 2, 3, 4, 5.
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.map(n -> input1S)
.forEach(System.out::println);
}
}3. Вход и выход
В левой колонке приведены примеры использования метода `map` из Stream API Java. В правой колонке указаны описания преобразования типов данных, которые происходят в результате этих операций. Сопоставьте каждый пример кода с соответствующим описанием изменения типа. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок перемешан.
stream.map(s -> s.length())stream.map(Integer::parseInt)stream.map(user -> user.getName())stream.map(s -> s.toLowerCase())stream.mapToInt(x -> x)4. Цепочка map
Проанализируйте представленный код на Java, использующий Stream API с цепочкой преобразований map. Определите, что будет выведено в консоль в результате выполнения программы. Обратите внимание на последовательность преобразований: сначала числа преобразуются в строки, затем вычисляется длина каждой строки.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 12, 150);
List<Integer> result = numbers.stream()
.map(n -> "Number: " + n)
.map(String::length)
.collect(Collectors.toList());
System.out.println(result);
}
}5. Отсутствие возврата
В данном фрагменте кода на Java используется Stream API для преобразования списка строк. Однако в лямбда-выражении внутри метода map допущена синтаксическая ошибка: при использовании фигурных скобок для тела лямбды забыто ключевое слово return. Исправьте ошибку, чтобы код успешно компилировался и выполнял преобразование строк в верхний регистр.
import java.util.Arrays;import java.util.List;import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> names = Arrays.asList("john", "jane", "jack"); List<String> upperNames = names.stream() .map(name -> { name.toUpperCase() }) .collect(Collectors.toList()); System.out.println(upperNames); }}6. Логика обработки
Перед вами строки java-кода, демонстрирующие использование Stream API для преобразования и фильтрации данных. Строки перемешаны. Вам необходимо восстановить правильную последовательность, чтобы получить корректную программу, которая из списка строк, представляющих числа, создаёт поток, преобразует строки в целые числа, фильтрует неотрицательные значения и собирает результат в новый список. Обратите внимание на порядок операций в цепочке Stream API.
.map(Integer::parseInt)List<Integer> positiveNumbers = stringNumbers.stream() .collect(Collectors.toList()); .filter(n -> n >= 0)List<String> stringNumbers = Arrays.asList("1", "2", "-3", "4", "-5");7. Метод Reference
Из предложенных строк соберите корректную Java-программу, которая преобразует список строк в список их длин, используя Stream API и ссылку на метод (::) внутри map. Программа должна вывести результат в консоль. Игнорируйте лишние строки, которые не требуются для решения или используют лямбда-выражение вместо ссылки на метод.
import java.util.List;import java.util.Arrays;import java.util.stream.Collectors;import java.util.ArrayList;public class Main { public static void main(String[] args) { List<String> words = Arrays.asList("apple", "banana", "cherry"); List<Integer> lengths = words.stream() .map(s -> s.length()) .map(String::length) .map(String::toUpperCase) .collect(Collectors.toList()); .collect(Collectors.toSet()); System.out.println(lengths); System.out.println(words); }}