使用JShell的Java 9 Streams API

这篇文章着眼于使用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);
3651

jshell> 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值