Java 9 - Cải tiến API luồng

Các luồng được giới thiệu trong Java để giúp các nhà phát triển thực hiện các hoạt động tổng hợp từ một chuỗi các đối tượng. Với Java 9, một số phương thức khác được thêm vào để làm cho các luồng tốt hơn.

takeWhile (Giao diện dự đoán)

Cú pháp

default Stream<T> takeWhile(Predicate<? super T> predicate)

Phương thức takeWhile nhận tất cả các giá trị cho đến khi vị từ trả về false. Nó trả về, trong trường hợp luồng có thứ tự, một luồng bao gồm tiền tố dài nhất của các phần tử được lấy từ luồng này khớp với vị từ đã cho.

Thí dụ

import java.util.stream.Stream;

public class Tester {
   public static void main(String[] args) {
      Stream.of("a","b","c","","e","f").takeWhile(s->!s.isEmpty())
         .forEach(System.out::print);		 
   } 
}

Đầu ra

Phương thức takeWhile nhận tất cả các giá trị a, b và c, sau đó khi chuỗi trống, nó sẽ ngừng thực thi.

abc

dropWhile (Giao diện dự đoán)

Cú pháp

default Stream<T> dropWhile(Predicate<? super T> predicate)

Phương thức dropWhile loại bỏ tất cả các giá trị khi bắt đầu cho đến khi vị từ trả về true. Nó trả về, trong trường hợp luồng có thứ tự, một luồng bao gồm các phần tử còn lại của luồng này sau khi bỏ tiền tố dài nhất của các phần tử khớp với vị từ đã cho.

Thí dụ

import java.util.stream.Stream;

public class Tester {
   public static void main(String[] args) {
      Stream.of("a","b","c","","e","f").dropWhile(s-> !s.isEmpty())
         .forEach(System.out::print);
      
      System.out.println();
      Stream.of("a","b","c","","e","","f").dropWhile(s-> !s.isEmpty())
         .forEach(System.out::print);
   } 
}

Đầu ra

dropWhile method giảm các giá trị a, b và c, sau đó khi chuỗi trống, nó sẽ nhận tất cả các giá trị.

ef
ef

lặp lại

Cú pháp

static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)

phương thức lặp hiện có vị từ hasNext làm tham số dừng vòng lặp khi vị từ hasNext trả về false.

Thí dụ

import java.util.stream.IntStream;

public class Tester {
   public static void main(String[] args) {
      IntStream.iterate(3, x -> x < 10, x -> x+ 3).forEach(System.out::println);
   } 
}

Đầu ra

3
6
9

ofNullable

Cú pháp

static <T> Stream<T> ofNullable(T t)

Phương thức ofNullable được giới thiệu để ngăn NullPointerExceptions và tránh kiểm tra null cho các luồng. Phương thức này trả về một Luồng tuần tự chứa một phần tử duy nhất, nếu không phải null, nếu không thì trả về một Luồng trống.

Thí dụ

import java.util.stream.Stream;

public class Tester {
   public static void main(String[] args) {
      long count = Stream.ofNullable(100).count();
      System.out.println(count);
  
      count = Stream.ofNullable(null).count();
      System.out.println(count);
   } 
}

Đầu ra

1
0