jdk9又在jdk1.8的新功能Stream上新增了4个方法,让Stream使用起来更方便;
Stream新增的方法:
- default Stream<T> takeWhile(Predicate<? super T> predicate)
- default Stream<T> dropWhile(Predicate<? super T> predicate)
- public static<T> Stream<T> ofNullable(T t)
- public static<T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
方法说明:
- takeWhile:从头开始,满足条件时不断取数据,当不满足条件时停止取数据并返回包含已取数据的Stream;
- dropWhile:从头开始,满足条件时不断丢弃数据,当不满足条件时返回剩余的数据组成的Stream;
- ofNullable:可创建空的Stream,之前的of方法无法创建空的Stream;
- iterate:迭代操作,是一个新增重载方法,之前方法只有初始值和增量参数,新方法多了一个条件判断用于终止,类似for循环;
Demo:
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class MainTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(4);
list.add(2);
list.add(1);
list.add(5);
System.out.println(list);
System.out.println("====takeWhile");
list.stream().takeWhile(x -> x>2).forEach(System.out::print);
System.out.println();
list.stream().takeWhile(x -> x==3).forEach(System.out::print);
System.out.println("\n====dropWhile");
list.stream().dropWhile(x -> x>2).forEach(System.out::print);
System.out.println();
list.stream().dropWhile(x -> x==3).forEach(System.out::print);
System.out.println("\n====ofNullable");
try {
Stream a = Stream.of(null);
} catch (Exception e) {
System.out.println(e);
}
Stream a = Stream.ofNullable(null);
System.out.println(a);
System.out.println("====iterate");
//Stream<T> java.util.stream.Stream.iterate(T seed, UnaryOperator<T> f)
//Stream<T> java.util.stream.Stream.iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next) jdk9新增
Stream.iterate(100, i -> i < 105, i -> i + 2).forEach(System.out::println);
}
}
运行结果: