Stream API trong Java 8

Tram Ho

Giới thiệu về Stream API trong Java 8

Giới thiệu về Stream trong Java 8

  • Stream (luồng) là một đối tượng mới của Java được giới thiệu từ phiên bản Java 8, giúp cho việc thao tác trên collection và array trở nên dễ dàng và tối ưu hơn.
  • Một Stream đại diện cho một chuỗi các phần tử hỗ trợ các hoạt động tổng hợp tuần tự (sequential) và song song (parallel).

Trong Java 8, Collection interface được hỗ trợ 2 phương thức để tạo ra Stream bao gồm:

  • stream() : trả về một stream sẽ được xử lý theo tuần tự.
  • parallelStream() : trả về một Stream song song, các xử lý sau đó sẽ thực hiện song song.

Method References in Java

Trong Java 8, có ba kiểu method references:

  1. Reference tới method static: Khi bạn trỏ tới một method static bằng tên class và tên method.
    • Ví dụ: Math::pow
  2. Reference tới method instance: Khi bạn trỏ tới một method instance của một đối tượng cụ thể.
    • Ví dụ: “hello”::length
  3. Reference tới constructor: Khi bạn trỏ tới một constructor của một class.
    • Ví dụ: Person::new

Stream Method:

Stream trong Java là một thành phần quan trọng của Java 8 và được sử dụng để thao tác trên các tập dữ liệu. Sau đây là danh sách các method có sẵn trong interface Stream trong Java:

Filter – lọc:

  1. filter(Predicate<T> predicate): Lọc các phần tử theo điều kiện được đưa ra bởi predicate.

Mapping – chuyển kiểu:

  1. map(Function<T, R> mapper): phương thức quan trọng được sử dụng để chuyển đổi dữ liệu từ một định dạng sang một định dạng khác.

  1. flatMap(Function<T, Stream<R>> mapper): Ánh xạ mỗi phần tử sang một stream mới và sau đó kết hợp các stream đó thành một stream duy nhất.

Distinct – duy nhất:

  1. distinct(): Loại bỏ các phần tử trùng lặp, và đưa về các phần tử duy nhất.

Sorted – sắp xếp:

  1. sorted(): Sắp xếp các phần tử theo thứ tự tăng dần.

  1. sorted(Comparator<T> comparator): Sắp xếp các phần tử theo thứ tự được chỉ định bởi comparator.

  1. peek(Consumer<T> action): Thực hiện một hành động trên mỗi phần tử và trả về stream đầu vào.

  1. limit(long maxSize): Giới hạn số phần tử được trả về trong stream.

  1. skip(long n): trả về 1 stream nhưng bỏ qua n phần tử đầu tiên từ stream ban đầu.

  1. forEach(Consumer<T> action): Thực hiện một hành động trên mỗi phần tử.

  1. toArray(): Chuyển stream thành một mảng.

Reduce:

  1. reduce(T identity, BinaryOperator<T> accumulator): Tính toán kết quả của các phần tử trong stream bằng cách sử dụng một phép tính nhị phân được chỉ định bởi accumulator, với giá trị ban đầu được cung cấp bởi identity.

  1. collect(Collector<T, A, R> collector): Tính toán kết quả của các phần tử trong stream bằng cách sử dụng một đối tượng Collector.

Matching – khớp:

  1. anyMatch(Predicate<T> predicate): Kiểm tra xem có phần tử nào trong stream thỏa mãn điều kiện được đưa ra bởi predicate hay không.

  1. allMatch(Predicate<T> predicate): Kiểm tra xem tất cả các phần tử trong stream đều thỏa mãn điều kiện được đưa ra bởi predicate hay không.

  1. noneMatch(Predicate<T> predicate): Kiểm tra xem không có phần tử nào trong stream thỏa mãn điều kiện được đưa ra bởi predicate hay không.

Find – tìm:

  1. findFirst(): Trả về phần tử đầu tiên trong stream.

  1. findAny(): Trả về bất kỳ phần tử nào trong stream.

Count – đếm:

  1. count(): Đếm số phần tử trong stream.

  1. max(Comparator<T> comparator): Trả về phần tử lớn nhất theo thứ tự được chỉ định bởi comparator.

  1. min(Comparator<T> comparator): Trả về phần tử nhỏ nhất theo thứ tự được chỉ định bởi comparator.

  1. forEachOrdered(Consumer<T> action): Thực hiện một hành động trên mỗi phần tử theo thứ tự được đảm bảo bởi stream theo thứ tự đúng (ordered).

  1. isParallel(): Kiểm tra xem stream có được thực thi song song (parallel) hay không.

  1. sequential(): Chuyển đổi stream hoạt động ở chế độ song song (parallel) sang chế độ tuần tự (sequential).

  1. parallel(): Chuyển đổi stream hoạt động ở chế độ tuần tự (sequential) sang chế độ song song (parallel).

  1. unordered(): Chuyển đổi stream thành một stream không đảm bảo thứ tự.
  2. onClose(Runnable closeHandler): Thêm một hàm xử lý được thực thi khi stream bị đóng.
  3. close(): Đóng stream và giải phóng tài nguyên.
  4. iterator(): Trả về một iterator cho stream.

  1. spliterator(): Trả về một Spliterator cho stream.

Stream of primitive type:

IntStream, LongStream, DoubleStream Number stream có sẵn các method cho tính toán với kiểu số như method: sum, count, average, max, min

  1. mapToInt(): Chuyển đổi các phần tử của một Stream thành các giá trị kiểu nguyên.

Ngoài ra, Stream cũng có thể được tạo ra từ nhiều nguồn khác nhau, bao gồm các collection, mảng, các nguồn I/O và các generator. Các phương thức để tạo Stream từ các nguồn này bao gồm:

  1. stream(): Tạo Stream từ một collection (tập hợp) như List, Set hoặc Map.

  1. parallelStream(): Tạo Stream song song từ một collection.

  1. of(T… values): Tạo Stream từ một mảng giá trị.

  1. generate(Supplier<T> s): Tạo Stream vô hạn bằng cách sử dụng một Supplier.
  2. iterate(T seed, UnaryOperator<T> f): Tạo Stream vô hạn bằng cách sử dụng một hạt giống và một UnaryOperator.
  3. concat(Stream<? extends T> a, Stream<? extends T> b): Nối hai Stream lại với nhau.
  4. empty(): Tạo Stream trống.
  5. ifPresent() : Sử dụng để kiểm tra xem có phần tử trong Stream không và thực thi một tác vụ xác định nếu có.

Tài liệu tham khảo:

https://github.com/hoangtien2k3qx1/Java/tree/main/src/java/Java8/StreamAPI

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo