Kotlin的Collection与Sequence操作异同点是什么
导读:本文共1882.5字符,通常情况下阅读需要6分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:为什么需要这么个东西?既然 Collection 能实现效果为什么还需要 Sequence 呢?他们的区别又是什么呢?区别与对比Collection 是立即执行的,每一次中间操作都会立即执行,并且把执行的结果存储到一个容器中,没多一个中间操作符就多一个容器存储结果。publicinlinefun<T,R>Iterable<T>.map(transform:(T)->R... ...
目录
(为您整理了一些要点),点击可以直达。为什么需要这么个东西?既然 Collection 能实现效果为什么还需要 Sequence 呢?他们的区别又是什么呢?
区别与对比
Collection 是立即执行的,每一次中间操作都会立即执行,并且把执行的结果存储到一个容器中,没多一个中间操作符就多一个容器存储结果。
publicinlinefun<T,R>Iterable<T>.map(transform:(T)->R):List<R>{
returnmapTo(ArrayList<R>(collectionSizeOrDefault(10)),transform)
}
publicinlinefun<T>Iterable<T>.filter(predicate:(T)->Boolean):List<T>{
returnfilterTo(ArrayList<T>(),predicate)
}
比如常用的 map 和 filter 都是会新建一个 ArrayList 去存储结果,
Sequence 是延迟执行的,它有两种类型,中间操作和末端操作 ,主要的区别是中间操作不会立即执行,它们只是被存储起来,中间操作符会返回另一个Sequence,仅当末端操作被调用时,才会按照顺序在每个元素上执行中间操作,然后执行末端操作。
publicfun<T,R>Sequence<T>.map(transform:(T)->R):Sequence<R>{
returnTransformingSequence(this,transform)
}
publicfun<T>Sequence<T>.filter(predicate:(T)->Boolean):Sequence<T>{
returnFilteringSequence(this,true,predicate)
}
比如常用的 map 和 filter 都是直接返回 Sequence 的this 对象。
publicinlinefun<T>Sequence<T>.first(predicate:(T)->Boolean):T{
for(elementinthis)if(predicate(element))returnelement
throwNoSuchElementException("Sequencecontainsnoelementmatchingthepredicate.")
}
然后在末端操作中,会对 Sequence 中的元素进行遍历,直到预置条件匹配为止。
这里我们举一个示例来演示一下:
我们使用同样的筛选与转换,来看看效果
vallist=mutableListOf<Person>()
for(iin1..10000){
list.add(Person("name$i",(0..100).random()))
}
valtime=measureTimeMillis{
vallist1=list.filter{
it.age>50
}.map{
it.name
}.take(3)
YYLogUtils.w("list1$list1")
}
YYLogUtils.w("耗费的时间$time")
valtime2=measureTimeMillis{
vallist2=list.asSequence()
.filter{
it.age>50
}.map{
it.name
}.take(3).toList()
YYLogUtils.w("list2$list2")
}
YYLogUtils.w("耗费的时间2$time2")
运行结果:
当集合数量为10000的时候,执行时间能优秀百分之50左右:
当集合数量为5000的时候,执行时间相差比较接近:
当集合数量为3000的时候,此时的结果就反过来了,Sequence延时执行的优化效果就不如List转换Sequence再转换List了:
读到这里,这篇“Kotlin的Collection与Sequence操作异同点是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
Kotlin的Collection与Sequence操作异同点是什么的详细内容,希望对您有所帮助,信息来源于网络。