Java 9 Stream API改进
在Java 9中,Stream API进行了改进,并将新方法添加到Stream接口。这些方法如下表所示。
修饰符和类型 |
方法 |
说明 |
default Stream<T> |
takeWhile(Predicate <?super T>predicate) |
如果此流被排序,它将返回一个流,该流由从该流中获取的,匹配给定谓词的元素的最长前缀组成。否则,如果此流是无序的,则返回一个流,该流由从该流中获取的与给定谓词匹配的元素的子集组成。 |
default Stream<T> |
dropWhile(Predicate <?super T>predicate) |
如果此流被排序,则返回该流,该流将删除与给定谓词匹配的元素的最长前缀后,由该流的其余元素组成。否则,如果此流是无序的,则返回在删除与给定谓词匹配的元素子集之后由该流的其余元素组成的流。 |
static <T> Stream<T> |
ofNullable(T t) |
如果不为null,则返回包含单个元素的顺序Stream,否则返回空Stream。 |
static <T> Stream<T> |
iterate(T seed, Predicate<?super T> hasNext,UnaryOperator <T> next) |
它返回由给定的next函数迭代应用给初始元素产生的顺序有序Stream,条件是满足给定的hasNext谓词。当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);
}
}
此示例返回一个空列表,因为它在第一个列表元素处失败,并且获取时间在此处停止。
输出:
Java流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);
}
}
输出:
Java Stream dropWhile()方法
Stream dropWhile方法根据流元素的顺序返回结果。
有序流: 在删除与给定谓词匹配的元素后,它返回包含元素的流。
无序流: 在删除与给定谓词匹配的元素子集之后,它返回包含该流剩余元素的流。
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 Nullable方法流
Nofable方法流返回包含单个元素(如果非null)的顺序流。否则,它将返回一个空流。
它有助于处理空流和NullPointerException。
Java 9 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);
}
}
输出:
25
Stream can have null values also.
Java 9 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流迭代方法
新的重载方法
iterate 已添加到Java 9流接口。此方法允许我们迭代流元素直到指定条件。
它需要三个参数,seed,hasNext和next。
Java流迭代方法示例
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);
}
}
输出: