0Pricing
Java Academy · Урок

IntStream и LongStream

Избегайте упаковки значений в потоках

«IntStream и LongStream» — бесплатный урок Java Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Зачем нужны потоки примитивов

Stream<Integer> упаковывает каждый элемент в объект Integer. IntStream, LongStream и DoubleStream работают непосредственно с примитивами, чтобы избежать затрат на упаковку.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int sum = IntStream.of(1, 2, 3, 4).sum();
        System.out.println(sum);
    }
}

Создание IntStream

Используйте IntStream.of для явно заданных значений или применяйте Arrays.stream к массиву int[].

import java.util.Arrays;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int[] data = {10, 20, 30};
        IntStream s = Arrays.stream(data);
        System.out.println(s.max().getAsInt());
    }
}

LongStream для больших чисел

LongStream похож на IntStream, но работает со значениями типа long, предотвращая переполнение при больших суммах.

import java.util.stream.LongStream;

public class Main {
    public static void main(String[] args) {
        long total = LongStream.of(1_000_000_000L, 2_000_000_000L).sum();
        System.out.println(total);
    }
}

Специализированные терминальные операции

Потоки примитивов добавляют числовые методы, которых нет у потоков объектов: sum, min, max, average.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        IntStream nums = IntStream.of(4, 8, 15, 16, 23, 42);
        System.out.println(nums.average().getAsDouble());
    }
}

Результаты OptionalInt

min и max возвращают OptionalInt, потому что поток может быть пустым. Используйте getAsInt или orElse.

import java.util.OptionalInt;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        OptionalInt result = IntStream.empty().max();
        System.out.println(result.orElse(-1));
    }
}

map сохраняет примитивный тип

map у IntStream принимает IntUnaryOperator и возвращает другой IntStream, поэтому упаковки не происходит.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int sumOfSquares = IntStream.of(1, 2, 3)
            .map(n -> n * n)
            .sum();
        System.out.println(sumOfSquares);
    }
}

filter в потоках примитивов

filter принимает IntPredicate и оставляет подходящие примитивные значения.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        long evens = IntStream.of(1, 2, 3, 4, 5, 6)
            .filter(n -> n % 2 == 0)
            .count();
        System.out.println(evens);
    }
}

reduce в IntStream

reduce сворачивает поток с помощью IntBinaryOperator. Если указать начальное значение, он напрямую возвращает int.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int product = IntStream.rangeClosed(1, 5)
            .reduce(1, (a, b) -> a * b);
        System.out.println(product);
    }
}

forEach для примитивов

forEach принимает IntConsumer, также избегая упаковки.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        IntStream.of(7, 8, 9).forEach(n -> System.out.println(n));
    }
}

Сбор в массив

toArray возвращает примитивный массив int[] — естественный результат для IntStream.

import java.util.Arrays;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int[] doubled = IntStream.of(1, 2, 3).map(n -> n * 2).toArray();
        System.out.println(Arrays.toString(doubled));
    }
}

Преобразование между Int и Long

IntStream.asLongStream расширяет примитивы до long без упаковки.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        long sum = IntStream.of(1, 2, 3).asLongStream().sum();
        System.out.println(sum);
    }
}

Быстрая проверка

Какова главная причина использовать IntStream вместо Stream<Integer>?

Повторение

Вы использовали потоки примитивов, чтобы избежать упаковки:

  • IntStream и LongStream хранят примитивные значения.
  • Они добавляют числовые терминальные операции: sum, min, max, average.
  • min и max возвращают OptionalInt.
  • map, filter, reduce и toArray сохраняют примитивный тип.

Часто задаваемые вопросы

Урок «IntStream и LongStream» бесплатный?

Да — полный текст урока «IntStream и LongStream» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «IntStream и LongStream»?

Избегайте упаковки значений в потоках Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «IntStream и LongStream»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. IntStream и LongStream
  2. Диапазоны и агрегирующие операции
  3. Преобразование объектных потоков и обратно
  4. Генерация примитивных потоков
← Назад к Java Academy