Stream API
BaseStream
В основе Stream API лежит интерфейс BaseStream (java.util.stream.BaseStream):
interface BaseStream<T, S extends BaseStream<T, S>>
От интерфейса BaseStream наследуется ряд интерфейсов, предназначенных для создания конкретных потоков:
Stream<T>
: используется для потоков данных, представляющих любой ссылочный тип
IntStream
: используется для потоков с типом данных int
DoubleStream
: используется для потоков с типом данных double
LongStream
: используется для потоков с типом данных long
BaseStream определяет базовый функционал для работы с потоками, который реализуется через его методы:
void close()
: закрывает поток
boolean isParallel()
: возвращает true, если поток является параллельным
Iterator<Т> iterator()
: возвращает ссылку на итератор потока
Spliterator<Т> spliterator()
: возвращает ссылку на сплитератор потока
S parallel()
: возвращает параллельный поток (параллельные потоки могут задействовать несколько ядер процессора в многоядерных архитектурах)
S sequential()
: возвращает последовательный поток
S unordered()
: возвращает неупорядоченный поток
Промежуточные (Intermediate)
Возвращают преобразованный поток. Такие операции промежуточные и возвращают другой поток.
filter
: возвращает поток, включающий элементы, соответствующие предикату
map
: возвращает поток, состоящий из элементов, полученных с помощью применения функции (преобразует каждый элемент)
limit
: возвращает поток, состоящий из первых n элементов этого потока
distinct
: возвращает поток, который имеет только уникальные элементы в соответствии с методом equals
sorted
: возвращает поток, состоящий из элементов, отсортированных в соответствии с естественным порядком или заданным компаратором
flatMap
: позволяет заменить значение потоком и объединить все потоки вместе
Терминальные (Terminal)
Возвращают конкретный результат. Stream завершается терминальной операцией.
collect(toList)
: возвращает список из значений в потоке, в общем случае сбор является более сложной операцией
toArray
: возвращает массив из значений в потока
max / min
: возвращает максимальный / минимальный элемент потока в соответствии с заданным компаратором
count
: возвращает число элементов в stream
forEach
: выполняет операцию для каждого элемента потока (есть побочные эффекты!)
reduce
: объединяет значения из потока в одно значение (агрегатное значение)
anyMatch
: возвращает true, если хотя бы один элемент соответствует предикату (см. также: allMatch, noneMatch)