java9新特性-Stream API 增强

java9新特性-Stream API 增强
jwangJava 9中Stream API的增强特性
在Java9中Stream的接口上增加了四个方法
- takeWhile(Predicate Interface)
- dropWhile(Predicate Interface)
- iterate
- ofNullable
Stream.takeWhile(Predicate)
在进行Stream流的管道数据处理的时候,提供的Predicate条件返回false之后,将跳过剩余的数据元素直接返回。在下面的示例中,一旦Predicate条件!”orange” .equals(s)返回false,则将跳过其他元素
String[] fruits = {"apple", "banana", "orange", "mango", "peach"}; |
控制台输出结果为,依次对数组中元素过滤,到orange元素满足了!"orange" .equals(s) === false,流式处理不再继续直接返回。
apple |
- 需要注意的是:对于无序Stream,如果存在多个与提供的Predicate匹配的元素(多个orange),则此操作返回值是不确定的。
这种方法看上去和Java 8中的Stream.filter()很相似,但是它们的不同之处在于filter()方法只是跳过了不匹配的元素,然后继续进行处理。然而takeWhile()方法在存在匹配项之后会跳过所有剩余的元素,有点像continue和break的区别。以下是具有相同流和Predicate的filter()方法示例
String[] fruits = {"apple", "banana", "orange", "mango", "peach"}; |
Stream.dropWhile(Predicate)
提供的Predicate条件在管道流中返回false之后,此元素后面的所有数据元素作为返回值返回。
String[] fruits = {"apple", "banana", "orange", "mango", "peach"}; |
在上面示例中,一旦Predicate条件!”orange”.equals(s)返回false,管道流中剩余的元素将被接受(不被过滤),作为返回值返回
orange |
Stream Stream.iterate(T,Predicate,UnaryOperator)
一旦Predicate条件返回false,此方法将返回一个顺序流,该顺序流将停止迭代操作。T为初始值,迭代操作由UnaryOperator来提供
Stream<String> iterate = Stream.iterate("-", |
控制台打印输出的结果,只输出四个横杠,到第五个的时候停止。这是由Predicate条件决定的。
- |
Stream Stream.ofNullable(T)
此方法返回一个包含单个元素的顺序Stream。如果提供的元素为null,则此方法返回空Stream。当我们要将非空单个元素附加到流时,此方法很有用
String nullableItem = "peach"; |
IntStream,LongStream和DoubleStream方法
下面的这些XxxStream类也具有与Stream类等效的方法(ofNullable()方法除外)
IntStream.of(2, 4, 6, 8, 9, 10, 11) |


