java中的lambda_使用流,Java8中的lambda

首先,我要指出,您想要更改的原始代码没有太大的错误。仅仅因为Java有流,你就没有

使用它们。

OptionalInt indexOfMatchingItem = IntStream.range(0, tracings.size())

.filter(i -> tracings.get(i).getDestination())

.findFirst();

List newTracings = new ArrayList<>(

indexOfMatchingItem

.map(i -> tracings.subList(0, i + 1))

.orElse(tracings));

上面的内容可以写成一个表达式,但是用一个适当命名的中间变量将其拆分可以使代码自文档化。

tracings

. 如果

是不可变的,可以跳过构建新的ArrayList。

上述解决方案的性能略好于问题中的原始代码,因为ArrayList构造函数预先分配了一个完全符合所需大小的数组,从而避免了调整大小和多个数组副本的开销。

List newTracings =

Stream.concat(

tracings.stream().takeWhile(i -> !tracings.get(i).getDestination()),

tracings.stream().dropWhile(i -> !tracings.get(i).getDestination()).limit(1)

).collect(toList());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值