函数式编程 流Stream的使用

内部迭代与外部迭代

使用for 循环计算来自伦敦的艺术家人数

  1. 外部迭代
int count = 0;
for (Artist artist : allArtists) {
    if (artist.isFrom("London")) {
    count++;
    }
}

使用Iterator迭代

int count = 0;
Iterator<Artist> iterator = allArtists.iterator();
    while(iterator.hasNext()) {
        Artist artist = iterator.next();
        if (artist.isFrom("London")) {
            count++;
        }
    }

这里写图片描述

2.使用stream内部迭代

long count = allArtists.stream()
.filter(artist -> artist.isFrom("London"))
.count();

这里写图片描述

每种操作都对应Stream 接口的一个方法。为了找出来自伦敦的艺术家,需要对Stream 对象进行过滤:filter。过滤在这里是指“只保留通过某项测试的对象”。测试由一个函数完成,根据艺术家是否来自伦敦,该函数返回true 或者false。由于Stream API 的函数式编程风格,我们并没有改变集合的内容,而是描述出Stream 里的内容。count() 方法计算给定Stream 里包含多少个对象。

惰性求值和及早求值

只过滤,不计数

allArtists.stream()
.filter(artist -> artist.isFrom("London"));

这行代码并未做什么实际性的工作,filter 只刻画出了Stream,但没有产生新的集合。像filter 这样只描述Stream,最终不产生新集合的方法叫作惰性求值方法;而像count 这样最终会从Stream 产生值的方法叫作及早求值方法。

由于使用了惰性求值,没有输出艺术家的名字:

allArtists.stream()
.filter(artist -> {
    System.out.println(artist.getName());
    return artist.isFrom(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值