清单和添加所有单个语句Kotlin

kotlin中有没有什么方法可以代替两行之一。 我知道我可以创建一个扩展函数,但我很想知道它是否已经存在于kotlin中。 像listOfChecklist.clearAndAddAll()

 listOfChecklist.clear() listOfChecklist.addAll(newList) 

这是我现在手动使用扩展function。 但我希望有一个更好的解决方案。

 fun  MutableCollection.clearAndAddAll(replace: MutableSet) { clear() addAll(replace) } 

这是不可能的。 一个惯用的方法来解决你的情况将使用像范围函数。 虽然我没有看到很大的优势。

 val list = mutableListOf() with(list){ clear() addAll(arrayListOf()) } 

我的回答将是相当哲学的,所以这里是我的想法:

  1. 如果你真的觉得有必要把这两个操作合并成一行代码,这表明你经常使用它。

  2. 如果你经常使用这种设计模式,在我看来,你的应用程序/类的整体设计中有一些错误,在这里我完全同意@miensol的“我希望没有这样的方法”的评论。

  3. 如果你不经常使用它,我认为把它放在两行代码上使它更具可读性。

  4. 清除“listOfChecklist”只有在“newlist”被清除的情况下才有意义,否则你可以只保留“listOfChecklist = newlist”这样的引用和繁荣! 你完成了 …

  5. 如果你使用了很多可变列表,而这些列表正在被清除,而且它们的元素之间又是相互拷贝的,那么在我看来,它就像是过度使用可变状态,这使得你的代码很难理解。 我会建议看看一些核心函数式编程原则,这将使您彻底摆脱清除/ addAll的担忧:-)。

  6. 我不是一个性能专家,但是对于大多数用例来说,我并不真正看到重用现有列表的合理好处,而不是仅仅克隆它(如果你真的需要保留元素,出于某种原因)性能本身,无论如何,JVM几乎总是做得很好。

结论:我建议的是,如果你真的需要它,或者设计你的代码,以便完全避免clear / addAll的需要,就把它保留在两行上。 否则,你可以去你的扩展function,或任何让你感到高兴的东西。

你可以从你的newList创建一个新的实例。

 listOfChecklist = ArrayList(newlist)