← Назад к вопросам

Создавал ли Stream из массива данных с числами

2.0 Middle🔥 181 комментариев
#Stream API и функциональное программирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Создание Stream из массива данных с числами

Да, я регулярно создавал Stream из массивов данных с числами в своей практике. Это один из основных паттернов работы с функциональным программированием в Java.

Основные способы создания Stream

1. Использование Arrays.stream() для обычных массивов

int[] numbers = {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(numbers);
int sum = stream.sum();

Для примитивных типов используются специализированные потоки:

  • IntStream для int
  • LongStream для long
  • DoubleStream для double

2. Для массивов объектов

Integer[] numbers = {10, 20, 30, 40, 50};
Stream<Integer> stream = Arrays.stream(numbers);
long count = stream.filter(n -> n > 25).count();

3. Использование Stream.of()

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
int result = stream.mapToInt(Integer::intValue).sum();

Практические примеры

Фильтрация и преобразование

int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int sumOfEvenSquares = Arrays.stream(data)
    .filter(n -> n % 2 == 0)          // оставляем четные
    .map(n -> n * n)                   // возводим в квадрат
    .sum();                            // 4 + 16 + 36 + 64 + 100 = 220

Поиск и сбор результатов

Double[] prices = {19.99, 29.99, 9.99, 49.99};

List<Double> expensive = Arrays.stream(prices)
    .filter(p -> p > 20.0)
    .sorted(Comparator.reverseOrder())
    .collect(Collectors.toList());

Ключевые преимущества Streams

  • Декларативный стиль - описываем ЧТО нужно, а не КАК это делать
  • Ленивые вычисления - промежуточные операции (map, filter) не выполняются сразу
  • Параллелизм - .parallelStream() для многопоточной обработки
  • Читаемость - код более понятный и компактный

Особенности работы

Stateless vs Stateful операции

int[] nums = {3, 1, 4, 1, 5, 9};

// Stateless - каждый элемент обрабатывается независимо
Arrays.stream(nums).filter(n -> n > 2).forEach(System.out::println);

// Stateful - требуют сохранения состояния
Arrays.stream(nums).sorted().forEach(System.out::println);

Производительность

Для небольших массивов обычный цикл может быть быстрее, но разница минимальна. Streams особенно эффективны при параллельной обработке больших объемов данных:

int[] largeArray = new int[1000000];
int sumParallel = Arrays.stream(largeArray)
    .parallel()
    .filter(n -> n % 2 == 0)
    .sum();

Практический опыт

В реальных проектах я использовал Streams для:

  • Обработки данных из баз данных
  • Трансформации коллекций в REST API
  • Валидации и фильтрации пользовательского ввода
  • Параллельной обработки больших файлов

Это мощный инструмент, который делает код более функциональным и выразительным.