Chuyển đổi dữ liệu với Streams

Nhập/Xuất và Streams trong Java

Alex Liu

Software Development Engineer

Chuyển đổi dữ liệu với streams

  • Chuyển đổi dữ liệu với streams

    • Chuyển định dạng, tổng hợp và lọc thông tin
    • Lưu kết quả sang kiểu tập hợp mới (vd: từ List sang Set)
    • Bộ sưu tập hỗ trợ:
      • Lists (vd: ArrayList, LinkedList)
      • Sets (vd: HashSet, TreeSet)
      • Maps (Keys/ValuesStreams) (vd: HashMap, TreeMap)
      • Mảng (qua Arrays.stream())
  • Ví dụ ArrayList tên names dùng cho phần còn lại của video

    names: ["Alice", "Bob", "Charlie", "David"]
    
Nhập/Xuất và Streams trong Java

Dùng Stream để biến đổi phần tử

  • Chuẩn bị: import các lớp cần thiết Set, CollectorsStream
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

// Convert the `ArrayList` we created earlier `names` to a `Stream` Stream<String> namesStream = names.stream();
  • Dữ liệu hiện tại: [Alice, Bob, Charlie, David]
Nhập/Xuất và Streams trong Java

Dùng Stream để biến đổi phần tử (tiếp)

// Use `.map()` to convert each element to upper case
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • Dữ liệu hiện tại: [ALICE, BOB, CHARLIE, DAVID]
// use `.collect()` and `Collectors.toSet()` to store the transformed stream data
upperCaseNameStream.collect(Collectors.toSet())
  • Dữ liệu cuối:
    {CHARLIE, ALICE, BOB, DAVID}
    
Nhập/Xuất và Streams trong Java

Dùng Stream để tổng hợp

  • Phương thức .reduce()

    • Gộp các phần tử thành một kết quả
    • Hữu ích cho tính tổng, nối chuỗi, hoặc tìm min/max
  • Dùng .reduce() với hai đầu vào

    • Giá trị khởi tạo: giá trị bắt đầu, ví dụ 0
    • Toán tử nhị phân: hàm nhận hai đối số
      • (x, y) -> x + y nghĩa là:
        • x là tổng đã tích lũy
        • y là phần tử hiện tại
        • Cộng y vào x cho đến khi xử lý hết
Nhập/Xuất và Streams trong Java

Dùng Stream để tổng hợp: Ví dụ

  • Chuyển ArrayList names thành một đối tượng Stream.
    Stream<String> stream = names.stream();
    
  • Dùng .map() để lấy độ dài tên và .reduce() để cộng lại
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • Kết quả: 20
Nhập/Xuất và Streams trong Java

Ayo berlatih!

Nhập/Xuất và Streams trong Java

Preparing Video For Download...