Java 8 Primitives Stream
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!
В этой статье мы рассмотрим создание Stream-а примитивов в Java 8
1. Введение
Stream API - новый способ взаимодействия с данными, представляя их в виде конечного потока данных.
В Java 8 создание Stream-ов примитивов напрямую невозможно, из-за дженериков. Но разработчики сделали 3 Stream-а примитивов : IntStream, LongStream, DoubleStream.
С ними мы сегодня и научимся работать.
2. Creating Primitives Stream
Для создание Stream-а примитивов можно воспользоваться одним из методов
2.1 Creating using .of
1 2 3 4 5 |
public static void main(String[] args) { IntStream intStream = IntStream.of(1, 2, 3, 4); LongStream longStream = LongStream.of(5, 6, 7, 8); DoubleStream doubleStream = DoubleStream.of(9, 10, 11, 12); } |
2.2 Creating using range
При использовании метода range мы указываем 2 параметра, startInclusive и endExclusive, после чего у нас генирируется Stream в указаном диапазоне. DoubleStream данный метод не поддерживают.
1 2 3 4 5 |
public static void main(String[] args) { IntStream intStream = IntStream.range(1, 100); // от 1 до 99 LongStream longStream = LongStream.range(2, 200); // от 1 до 99 DoubleStream doubleStream = DoubleStream.range(3, 300); // метода нет, не компилируется } |
2.3 Creating using rangeClosed
Метод схож с предыдущим за одним исключением, диапазон теперь включает последнеее значение.
1 2 3 4 5 |
public static void main(String[] args) { IntStream intStream = IntStream.rangeClosed(1, 100); // от 1 до 100 LongStream longStream = LongStream.rangeClosed(2, 200); // от 1 до 100 DoubleStream doubleStream = DoubleStream.rangeClosed(3, 300); // метода нет, не компилируется } |
3. Промежуточные операции
Промежуточные операции такие же как в обычных Stream-ах, но так же есть множество особенных. Мы рассмотрим только несколько.
3.1 asIntStream, asLongStream, asDoubleStream
IntStream можно преобразовать в LongStream, либо в DoubleStream. LongStream только в DoubleStream. DoubleStream назад не преобразовывается.
1 2 3 4 5 |
public static void main(String[] args) { DoubleStream doubleStream = IntStream.rangeClosed(1, 100) .asLongStream() .asDoubleStream(); } |
3.2 toArray
Все примитивные стримы можно преобразовать в массив примитивов
1 2 3 4 5 |
public static void main(String[] args) { int[] ints = IntStream.of(1, 2).toArray(); // [1, 2] long[] longs = LongStream.of(3, 4).toArray(); // [3, 4] double[] doubles = DoubleStream.of(5, 6).toArray(); // [5.0, 6.0] } |
4. Терминальные операции
Терминальные операции взяты из Stream-ов объектов, но так же есть особенные, мы рассмотрим только несколько.
4.1 Sum
1 2 3 4 5 |
public static void main(String[] args) { int intSum = IntStream.of(1, 2).sum(); // 3 long longSum = LongStream.of(3, 4).sum(); // 7 double doubleSum = DoubleStream.of(5, 6).sum(); // 11 } |
4.2 Average
Получить среднее значение довольно легко, однаку нужно помнить что метод average возвращает OptionalDouble, обертку над double, а не само значение.
1 2 3 4 5 |
public static void main(String[] args) { OptionalDouble intAverage = IntStream.of(1, 2).average(); // 1.5 OptionalDouble longAverage = LongStream.of(3, 4).average(); // 3.5 OptionalDouble doubleAverage = DoubleStream.of(5, 6).average(); // 5.5 } |
4.3 forEach
1 2 3 4 5 |
public static void main(String[] args) { IntStream.of(1, 3, 5, 7, 9) .filter((i) -> i > 3) .forEach(System.out::println); //output 5 7 9 } |
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Детальную информацию Вы можете найти у нас на сайте.