Назад к вопросам
Middle
108
questionbank

Для чего в стримах предназначены методы map(), mapToInt(), mapToDouble() и mapToLong()?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Эти методы используются для преобразования элементов стрима из одного типа в другой. Они применяют функцию к каждому элементу и возвращают новый стрим с преобразованными элементами.

  • map(Function<? super T, ? extends R> mapper): Преобразует стрим объектов типа T в стрим объектов типа R. mapper — это функция, которая принимает элемент типа T и возвращает элемент типа R.

    // Пример: преобразование стрима строк в их длины
    List<String> words = Arrays.asList("hello", "world");
    Stream<Integer> lengths = words.stream()
                                   .map(String::length);
    
  • mapToInt(ToIntFunction<? super T> mapper): Преобразует стрим объектов типа T в специализированный стрим примитивных int значений (IntStream). mapper — это функция, которая принимает элемент типа T и возвращает int.

    // Пример: преобразование стрима строк в их хэш-коды (int)
    List<String> words = Arrays.asList("hello", "world");
    IntStream hashCodes = words.stream()
                               .mapToInt(String::hashCode);
    
  • mapToDouble(ToDoubleFunction<? super T> mapper): Преобразует стрим объектов типа T в специализированный стрим примитивных double значений (DoubleStream). mapper — это функция, которая принимает элемент типа T и возвращает double.

    // Пример: преобразование стрима строк в их длину как double
    List<String> words = Arrays.asList("hello", "world");
    DoubleStream doubleLengths = words.stream()
                                   .mapToDouble(String::length); // Результат будет double
    
  • mapToLong(ToLongFunction<? super T> mapper): Преобразует стрим объектов типа T в специализированный стрим примитивных long значений (LongStream). mapper — это функция, которая принимает элемент типа T и возвращает long.

    // Пример: преобразование стрима строк в их длину как long
    List<String> words = Arrays.asList("hello", "world");
    LongStream longLengths = words.stream()
                                 .mapToLong(String::length); // Результат будет long
    

Использование mapToInt, mapToDouble и mapToLong предпочтительнее, когда результат преобразования является примитивным числовым типом, так как они работают с более эффективными специализированными стримами, которые избегают упаковки/распаковки примитивов в объекты.