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的集合。