Stream API (JSR 335)

Intro

Problem

Сложность решения некоторых простых задач в сравнении с функциональными языками программирования.

Solution

  • JSR-335: Lambda expressions

    • Stream API

Stream API

Stream API

  • Предназначен для обработки данных

  • Не хранит данные

  • Нельзя переиспользовать

  • Можно преобразовать в другие типы данных

Stream API

Stream

BaseStream

Interface BaseStream

  • interface BaseStream<T , S extends BaseStream<T , S>>

BaseStream Methods

  • close(): void

  • isParallel(): boolean

  • iterator(): Iterator<Т>

  • spliterator(): Spliterator<Т>

  • parallel(): S

  • sequential(): S

  • unordered(): S

BaseStream Inheritors

  • Stream<T>

  • IntStream

  • DoubleStream

  • LongStream

Stream<T>

Intermediate methods

  • map(Function<? super T, ? extends R> mapper): Stream<R>

  • filter(Predicate<? super T> predicate): Stream<T>

  • sorted(): Stream<T>

  • concat(Stream<? extends T> a, Stream<? extends T> b): Stream<T>

  • distinct(): Stream<T>

Intermediate methods

  • skip(long n): Stream<T>

  • sorted(Comparator<? super T> comparator): Stream<T>

  • takeWhile(Predicate<? super T> predicate): Stream<T>

  • dropWhile(Predicate<? super T> predicate): Stream<T>

  • limit(long maxSize): Stream<T>

Terminal methods

  • forEach(Consumer<? super T> action): void

  • allMatch(Predicate<? super T> predicate): boolean

  • anyMatch(Predicate<? super T> predicate): boolean

  • count(): long

  • noneMatch(Predicate<? super T> predicate): boolean

  • toArray(): Object[]

Terminal methods

  • collect(Collector<? super T, A, R> collector): <R, A> R

  • flatMap(Function<? super T, ? extends Stream<? extends R>> mapper): <R> Stream<R>

  • findFirst(): Optional<T>

  • findAny(): Optional<T>

  • max(Comparator<? super T> comparator): Optional<T>

  • min(Comparator<? super T> comparator): Optional<T>

Creating Stream

Creating Stream

  • default Stream<E> stream

  • default Stream<E> parallelStream

  • Arrays.stream(T[] array)

  • Stream.of(T..values)

Optional

Methods

  • Optional<T>.empty(): <T>

  • filter(Predicate<? super T> predicate): Optional<T>

  • flatMap(Function<? super T,Optional<U>> mapper): Optional<U>

  • get(): T

  • ifPresent(Consumer<? super T> consumer): void

  • isPresent(): boolean

Methods

  • map(Function<? super T,? extends U> mapper): Optional<U>

  • Optional<T>.of(T value): <T>

  • Optional<T>.ofNullable(T value): <T>

  • orElse(T other): T

  • orElseGet(Supplier<? extends T> other): T

  • <X extends Throwable> orElseThrow(Supplier<? extends X> exceptionSupplier): T

Method collect()

Collectors Methods

  • toList(): List<T>

  • toSet(): Set<T>

  • toMap(): Map<K, U>

  • toCollection(): Collection<T>

  • groupingBy(Function<? super T, ? extends K>): Collector<T, ?, Map<K, List<T>>>

  • partitioningBy(Predicate<? super T>): Collector<T, ?, Map<Boolean, List<T>>>

Collectors Methods

  • counting()

  • summing()

  • maxBy(Comparator<? super T>)

  • minBy(Comparator<? super T>)

  • summarizing()

  • mapping()

Parallel Stream

Methods

  • parallel()

  • sequential()

  • forEachOrdered()

  • unordered()