scala集合的一些高级操作

目录

懒视图


这个流(stream)操作是一个尾部懒计算的不可变列表,只有在需要它时,它才会计算。

 上面展示了创建Stream,为Steam增加head,构造一个新的Stream,增加head使用“#::”符号,增加之后。

调用Stream的尾部看看,究竟能得到什么

 调用tail方法得到尾部Stream,相当于在原有Stream的基础上,使尾部的第一个元素作为head其余元素作为tail而建立了一个新的Stream。

流的方法是懒执行的,举个栗子:

对Stream进行了map操作,依然是只对head进行了操作,tail做了lazy处理

如果想得到Steam中的所有元素怎么办?force方法解决这个问题,还可以结合take方法,获取制定个数的元素信息

懒视图

Stream的尾部是一个懒计算不可变的列表,如果其他集合也想有类似的功能怎么办呢?scala中提供了懒视图这个概念,解决了这个问题。我们可以对其他集合使用view方法,产出一个其方法都是懒执行的集合。

上面是普通集合和视图的对比,我们不难看对集合创建视图类,这个类有两个泛型,第一个就是集合所有元素对应的类型(如果元素类型不一致,那么泛型对应的就是他们的超类),第二个泛型就是集合的类型。

这里有一个注意点,那就是Stream只是尾巴懒,而view是全身上下都懒,所有元素都没有被求值。

懒集合的使用,在处理需要多种方式变换的大型集合中是非常实用的,能够避免构建中间集合,例如:

前者被调用时,对于每个元素,两个操作同时进行,不产生中间集合;后者实用时,先map成一个求平方集合,再根据求平方集合构建乘10的集合。

猜你喜欢

转载自blog.csdn.net/lazy_moon/article/details/82141760
今日推荐