Метод mapping
Метод mapping класса Collectors позволяет преобразовать
каждый элемент потока с помощью заданной функции, а затем собрать
полученные значения в новую коллекцию. Первым параметром метод
принимает функцию-преобразователь (mapper), которая применяется
к каждому элементу. Вторым параметром передается нижестоящий
коллектор (downstream), который определяет, каким образом будут
собраны уже преобразованные элементы.
Метод mapping особенно полезен в связке с группировкой
groupingBy, когда нужно не просто сгруппировать элементы,
а предварительно преобразовать их в другое значение.
Синтаксис
Collectors.mapping(mapper, downstream)
Пример
Давайте преобразуем каждую строку в списке в её длину и соберем результат в список:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("abcde", "ab", "abc", "a");
List<Integer> res = list.stream()
.collect(Collectors.mapping(s -> s.length(), Collectors.toList()));
System.out.println(res);
}
}
Результат выполнения кода:
[5, 2, 3, 1]
Пример
Давайте сгруппируем строки по длине, а внутри каждой группы преобразуем их в верхний регистр:
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("abcde", "ab", "abc", "a");
Map<Integer, List<String>> res = list.stream()
.collect(Collectors.groupingBy(
s -> s.length(),
Collectors.mapping(s -> s.toUpperCase(), Collectors.toList())
));
System.out.println(res);
}
}
Результат выполнения кода:
{1=[A], 2=[AB], 3=[ABC], 5=[ABCDE]}
Пример
Давайте преобразуем числа в их строковое представление и соберем результат во множество:
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
Set<String> res = list.stream()
.collect(Collectors.mapping(n -> "num" + n, Collectors.toSet()));
System.out.println(res);
}
}
Результат выполнения кода:
[num1, num2, num3, num4, num5]
Смотрите также
-
класс
Collectors,
который содержит методы для сборки элементов потока -
метод
groupingBy,
который группирует элементы по ключу -
метод
flatMapping,
который преобразует элементы в потоки и объединяет их -
метод
toList,
который собирает элементы в список