• Allen
    2022-03-16
    总是创建新集合的劣势主要有: 1. 比较浪费内存; 2. 当调用次数较频繁时,会导致频繁的 GC,造成非必要的资源开销。 在服务端程序中,如果并发较大时,不太适合使用这些 API。

    作者回复: 说得很好。

    
    6
  • Shanks-王冲
    2022-03-28
    是否会存在劣势呢?如何取舍呢? 我猜从2个角度,来大致估算下会消耗多少内存,第一,中间操作符个数数量,比如:一个list,一套「过滤、转换、分组、分割、求和」组合拳下来;第二,集合中item的大小,比如:大的item可以是一张bitmap(200kb~1M),小的item可以是 Stu(name, age),再用考虑用sequence(惰性)的估算一遍,问问自己或开发同事,能接受嘛? 涛哥,能否从并发的角度,聊聊「Kotlin推崇的不变性(Immutable)和无副作用特点」:)或者,涛哥有计划针对每节课留下的作业,进行一个统一答疑嘛,并聊聊涛哥你留下的每个思考题的初衷,本意是想引导同学往几个方向扩展下,比如:今天的思考题,大概率的引导方向是『并发安全』、集合与序列(Sequence),甚至Kotlin语言设计哲学:)

    作者回复: 答案很棒! PS:针对课后思考题,我在后续会抽一部分出来讲解的,但应该不会讲解每节课的思考题。

    
    2
  • 白泽丶
    2022-04-17
    劣势: 一些列集合操作会产生多个临时对象,造成GC频繁。 平时注意对于一些大数据的转换操作,或调用频繁的地方要慎用。

    作者回复: 不错的答案,赞~

    
    1
  • 魏全运
    2022-03-16
    这个问题我之前也提到过,这个对性能和内存占用都有影响,尤其是操作符很多的情况下,会创建大量的集合拷贝副本,针对这种情况可以用sequence进行优化。 但Kotlin的这种不变形在多线程操作的情况下有优势,不用担心数据并发访问时的异常(比如ConcurrentModifiedException)。 因此如何使用还是要视使用场景来定。

    作者回复: 很棒的答案。

    
    1
  • 抱紧我的小鲤鱼
    2022-04-28
    我觉得flod是reduce的特殊情况

    作者回复: 我其实更倾向于,reduce是fold的特殊情况,fold不需要初始值的情况下,就是reduce。不过,这不重要吧,反正它俩挺像的~

    
    
  • Paul Shan
    2022-03-24
    返回新数据避免了状态改写,减少了出错的概率,多数情况下是最优的,少数情况下,可能耗费内存过多,需要优化。

    作者回复: 是的。

    
    
  • 白乾涛
    2022-03-23
    是否存在劣势?该如何取舍? 有优势就有劣势,劣势就源自于优势。 如何取舍,那就看优势更明显,还是劣势更严重了。

    作者回复: 是这个道理。

    共 2 条评论
    
  • 7Promise
    2022-03-16
    创建新的集合必然消耗更多资源

    作者回复: 是的。

    
    
  • Geek_6061ea
    2022-08-04 来自北京
    Kotlin集合操作符整理汇总Iterable/Collection/List/Set/Map:https://blog.csdn.net/vitaviva/article/details/107587134
    共 1 条评论
    1
  • Calvin
    2023-09-08 来自广东
    老师好,请教下:kotlin的这些集合操作符,跟Java8的stream API 一样吗?Java8的流API好像是数据一个一个流动经过操作符的,不像这里说的kotlin那样一个操作符是所有数据for循环遍历并且每次新建新的集合接收新数据并返回,所以其实Java8的应该是能支持无限数据的流的。
    
    