Java 9 改進(jìn)的 Stream API 添加了一些便利的方法,使流處理更容易,并使用收集器編寫復(fù)雜的查詢。
Java 9 為 Stream 新增了幾個(gè)方法:dropWhile、takeWhile、ofNullable,為 iterate 方法新增了一個(gè)重載方法。
語法
default Stream<T> takeWhile(Predicate<? super T> predicate)
takeWhile() 方法使用一個(gè)斷言作為參數(shù),返回給定 Stream 的子集直到斷言語句第一次返回 false。如果第一個(gè)值不滿足斷言條件,將返回一個(gè)空的 Stream。
takeWhile() 方法在有序的 Stream 中,takeWhile 返回從開頭開始的盡量多的元素;在無序的 Stream 中,takeWhile 返回從開頭開始的符合 Predicate 要求的元素的子集。
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);
}
}
以上實(shí)例 takeWhile 方法在碰到空字符串時(shí)停止循環(huán)輸出,執(zhí)行輸出結(jié)果為:
abc
dropWhile 方法
語法
default Stream<T> dropWhile(Predicate<? super T> predicate)
dropWhile 方法和 takeWhile 作用相反的,使用一個(gè)斷言作為參數(shù),直到斷言語句第一次返回 true 才返回給定 Stream 的子集。
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);
}
}
以上實(shí)例 dropWhile 方法在碰到空字符串時(shí)開始循環(huán)輸出,執(zhí)行輸出結(jié)果為:
ef
iterate 方法
語法
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
方法允許使用初始種子值創(chuàng)建順序(可能是無限)流,并迭代應(yīng)用指定的下一個(gè)方法。 當(dāng)指定的 hasNext 的 predicate 返回 false 時(shí),迭代停止。
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);
}
}
執(zhí)行輸出結(jié)果為:
3
6
9
ofNullable 方法
語法
static <T> Stream<T> ofNullable(T t)
ofNullable 方法可以預(yù)防 NullPointerExceptions 異常, 可以通過檢查流來避免 null 值。
如果指定元素為非 null,則獲取一個(gè)元素并生成單個(gè)元素流,元素為 null 則返回一個(gè)空流。
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);
}
}
執(zhí)行輸出結(jié)果為:
1
0