Java 9 Stream API改进

本文概述

  • Java Stream takeWhile()方法
  • Java 9 Stream of Nullable方法
  • Java Stream迭代方法
在Java 9中, 改进了Stream API, 并将新方法添加到Stream接口。这些方法如下表所示。
修饰符和类型 方法 描述
默认Stream < T> takeWhile(Predicate < ?super T> 谓词) 如果此流是有序的, 它将返回一个流, 该流由与此流中匹配给定谓词的元素的最长前缀组成。否则, 如果此流是无序的, 则返回一个流, 该流由从该流中获取的与给定谓词匹配的元素的子集组成。
default Stream< T> dropWhile(Predicate < ?super T> 谓词) 如果删除该流, 则返回该流中剩余元素组成的流, 该流将删除与给定谓词匹配的元素的最长前缀。否则, 如果此流是无序的, 则返回在删除与给定谓词匹配的元素子集之后由该流的其余元素组成的流。
静态< T> 流< T> ofNullable(T t) 如果不为null, 则返回包含单个元素的顺序Stream, 否则返回空Stream。
静态< T> 流< T> iterate(T种子, 谓词< ?super T> hasNext, UnaryOperator < T> next) 它以满足给定的hasNext谓词为条件, 将通过将给定的next函数迭代应用到初始元素而产生的顺序有序Stream返回。当hasNext谓词返回false时, 流终止。
Java Stream takeWhile()方法Stream takeWhile方法采用与其谓词匹配的每个元素。当得到不匹配的元素时, 它停止。它返回包含所有匹配元素的元素子集, 流的其他部分被丢弃。
Java Stream takeWhile()方法示例1
在此示例中, 我们有一个整数列表, 并使用takewhile方法获取了偶数值。
import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamExample { public static void main(String[] args) {List< Integer> list = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).takeWhile(i -> (i % 2 == 0)).collect(Collectors.toList()); System.out.println(list); }}

此示例返回一个空列表, 因为它在第一个列表元素处失败, 并且takewhile在此处停止。
输出:
[]

Java Stream takeWhile()方法示例2
< p> In this example, we are getting first two elements because these are even and stops at third element. < /p> < div class="codeblock"> < textarea name="code" class="java"> import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamExample { public static void main(String[] args) {List< Integer> list = Stream.of(2, 2, 3, 4, 5, 6, 7, 8, 9, 10).takeWhile(i -> (i % 2 == 0)).collect(Collectors.toList()); System.out.println(list); }}

输出:
[2, 2]

Java Stream dropWhile()方法
Stream dropWhile方法根据流元素的顺序返回结果。
【Java 9 Stream API改进】有序流:在删除与给定谓词匹配的元素后, 返回包含元素的流。
无序流:在删除与给定谓词匹配的元素子集之后, 它返回包含该流剩余元素的流。
Java Stream dropWhile()方法示例
import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamExample { public static void main(String[] args) {List< Integer> list = Stream.of(2, 2, 3, 4, 5, 6, 7, 8, 9, 10).dropWhile(i -> (i % 2 == 0)).collect(Collectors.toList()); System.out.println(list); }}

输出:
[3, 4, 5, 6, 7, 8, 9, 10]

Java 9 Stream of Nullable方法Stream ofNullable方法返回包含单个元素(如果非null)的顺序流。否则, 它将返回一个空流。
它有助于处理空流和NullPointerException。
Java 9 Stream of Nullable方法示例1
import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamExample { public static void main(String[] args) {List< Integer> list = Stream.of(2, 2, 3, 4, 5, 6, 7, 8, 9, 10).dropWhile(i -> (i % 2 == 0)).collect(Collectors.toList()); System.out.println(list); }}

输出:
25Stream can have null values also.

Java 9 Stream of Nullable方法示例2
import java.util.stream.Stream; public class StreamExample { public static void main(String[] args) {Stream< Integer> val = Stream.ofNullable(null); val.forEach(System.out::println); }}

该程序不会产生任何输出。
Java Stream迭代方法新的重载方法iterate已添加到Java 9流接口。这种方法允许我们迭代流元素直到指定条件。
它需要三个参数:seed, hasNext和next。
Java Stream迭代方法示例
import java.util.stream.Stream; public class StreamExample { public static void main(String[] args) {Stream.iterate(1, i -> i < = 10, i -> i*3).forEach(System.out::println); }}

输出:
139

    推荐阅读