java streams
这篇文章着眼于使用JShell的Java 9 Streams API。 Streams API的更改以Java 8中Streams的成功为基础,并引入了许多实用程序方法– takeWhile,dropWhile和iterate。 这篇文章延续了My Top Java 9功能,并使用Jshell探索了这些方法。
流API
Streams API和Lambda是Java 8最成功的功能,而Java 9的更改基于Java 8的一些新实用程序方法
jshell> Stream.of(1,2,3,4,5).takeWhile(p->p<3).forEach(System.out::print);
12
现在让我们返回所有大于3的值,并且我们看到谓词立即返回false,并且没有任何返回值
jshell> Stream.of(1,2,3,4,5).takeWhile(p -> p > 3).forEach(System.out::print);jshell>
- 无序列表–直到谓词失败的最长值列表,尽管下游可能存在满足谓词的值,但这些值不会返回
我们可以在下面看到,即使最后一个元素为1,列表也只返回2,而有序列表将返回1和2 –
jshell> Stream.of(2,3,6,5,1).takeWhile(p -> p < 3).forEach(System.out::print);
2
dropWhile提供与takeWhile相反的行为,因此在谓词为true时删除记录。 和以前一样,我们对排序和未排序列表也有类似的考虑。
- 有序列表–将返回最长的记录列表,不包括满足谓词的那些元素
jshell> Stream.of(1,2,3,4,5).dropWhile(p -> p < 3).forEach(System.out::print);
345
- 无序列表–将删除满足谓词的第一条记录–
jshell> Stream.of(2,3,6,5,1).dropWhile(p -> p < 3).forEach(System.out::print);
3651jshell> Stream.of(1,2,3,5,6).dropWhile(p -> p < 3).forEach(System.out::print);
365
dropWhile / takeWhile结论
结论是,除非有副作用在代码中是可接受的,否则在处理无序列表时需要注意。 尽管我无法想到一个可以接受无序列表的随机元素的用例,但是我确信其中存在一些。
这以类似于for循环的方式运行。 取一个起始值(T种子),退出条件(谓词)
hasNext)以及是否具有下一个值(谓词)
hasNext)
迭代方法附加了退出条件–
jshell> Stream.iterate(1, i -> i < 6, i -> i + 1).forEach(System.out::println);
1
2
3
4
5
结论
dropWhile和takeWhile为Java Streams API提供了一些有用的实用程序方法。 主要含义是您的流是有序的还是无序的。 Stream.iterate方法允许我们在Stream内部具有for循环功能。 我期待听到人们使用这些新方法的经验。
翻译自: https://www.javacodegeeks.com/2017/11/java-9-streams-api-using-jshell.html
java streams