用逗号分隔附加字符串的有效方法[Kotlin]

Jos*_*Mad 11 kotlin

我想知道是否有一种有效的方法可以用逗号分隔不同的字符串作为分隔符

Java8那里StringUtils.join(java.lang.Iterable,char).

对于Kotlin我才发现joinToString,从阵列/列表转换为字符串.据我所知,joinToString转换整个列表/数组.如果我想将几个项目从数组转换为逗号分隔的字符串而不是所有这些字符串怎么办?如何做到这一点?是否有一些简短而优雅的东西Kotlin(显然,我可以为此制作自己的功能,但我只是想知道).

list.forEachIndexed { index, item ->
   if (item.isGreen) {
       ...        
   }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*bCo 21

val greenString = list.filter(ItemClass::isGreen).joinToString()
Run Code Online (Sandbox Code Playgroud)

这里,ItemClass是您的项目的类型,它定义了isGreen函数或属性.ItemClass::isGreen是对此方法/属性的引用.

您也可以使用lambda获得相同的效果(请参阅其他答案).


编辑:您可以使用transform参数指定对象应如何在joinToString函数中表示为String.
因为这是最后一个参数,所以它可以在常规括号之外给出:

list.filter(ItemClass::isGreen).joinToString() { it.content.text }
Run Code Online (Sandbox Code Playgroud)

您现在甚至可以将括号全部放在一起,但它们可能会用于其他参数.
您不能在此处使用引用样式(::),因为它是一个复杂的表达式,而不是对特定方法或属性的直接引用.

  • 您可以将其命名为带有命名参数的`list.joinToString(transform = {it.content.name})`,或称为`list.joinToString {it.content.name}`,因为lambda是最后一个参数功能. (2认同)

Dan*_*nte 7

对于此示例,您可以执行以下操作:

list
    .filter { it.isGreen }
    .joinToString()
Run Code Online (Sandbox Code Playgroud)

  • 如果有人寻找另一个分隔符,请使用`joinToString(separator =“ \ n”)`。 (3认同)