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

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

  listOfChecklist.clear() listOfChecklist.addAll(newList) 

这是我现在手动使用扩展功能。 但我希望有一个更好的解决方案。 提前致谢。

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

这是不可能的。 如果你喜欢的话,用惯用的方法来解决你的问题。 虽然我没有看到很大的优势。

 val list: MutableList<String> = mutableListOf() with(list){ clear() addAll(arrayListOf()) } 

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

  1. 如果你真的觉得有必要将这两个操作合并成一行代码,那么建议你经常使用它。

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

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

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

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

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

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

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

 listOfChecklist = ArrayList(newlist)