在单个语句Kotlin中列出clear和addAll

时间:2017-01-13 07:20:49

标签: kotlin

kotlin中是否有任何方法将以下两行替换为一行。我知道我可以创建一个扩展函数,但我很想知道它是否已经存在于kotlin中。类似于// create an NSMutableAttributedString that we'll append everything to let fullString = NSMutableAttributedString(string: "Start of text") // create our NSTextAttachment let image1Attachment = NSTextAttachment() image1Attachment.image = UIImage(named: "Icon.png") // wrap the attachment in its own attributed string so we can append it let image1String = NSAttributedString(attachment: image1Attachment) // add the NSTextAttachment wrapper to our full string, then add some more text. fullString.append(image1String) fullString.append(NSAttributedString(string: "End of text")) // draw the result in a label yourLabel.attributedText = fullString

listOfChecklist.clearAndAddAll()

这就是我现在使用扩展功能手动完成的操作。但我希望有更好的解决方案。

listOfChecklist.clear()
listOfChecklist.addAll(newList)

3 个答案:

答案 0 :(得分:5)

这是不可能的。解决案例的惯用方法是使用像with这样的范围函数。我不认为这里有很大的优势。

val list = mutableListOf<String>()

with(list){
    clear()
    addAll(arrayListOf())
}

答案 1 :(得分:1)

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

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

  2. 如果您经常使用这种设计模式,在我看来,您的应用程序/类的整体设计中存在一些错误,在这里我完全赞同&#34;我希望在那里&#39没有这样的方法&#34;评论@miensol。

  3. 如果您不经常使用它,我认为将其留在2行代码上会使其更具可读性。

  4. 清除&#34; listOfChecklist&#34;只有在&#34; newlist&#34;在某些时候也会被清除,否则你可以像以下一样保留参考:&#34; listOfChecklist = newlist&#34; 并繁荣!你完成了......

  5. 如果你使用多个可变列表,它们被清除并且它们之间的元素被复制,那么在我看来它是一种过度使用可变状态,这使你的代码难以推理关于。我建议你看看一些核心的函数式编程原理,它们可以让你完全摆脱clear / addAll的问题: - )。

  6. 我不是性能专家,但对于大多数用例,我都没有真正看到重用现有列表的合理好处,而不仅仅是克隆它(如果你真的需要保留它由于某些原因而且说到性能本身,JVM几乎总能做得很好。

  7. 结论:如果您真的需要它或者以某种方式设计代码,我建议将它保留在2行,这样您就可以完全避免使用clear / addAll。否则你可以使用你的扩展功能或任何让你感到快乐的事情。

答案 2 :(得分:-2)

您只需从newList创建一个新实例。

listOfChecklist = ArrayList(newlist)