Groovy字符串连接与空检查

Rya*_*yan 8 string null groovy concatenation

有一个更好的方法吗?注意:part1,part2并且part3是在别处定义的字符串变量(它们可以为null).

def list = [part1, part2, part3]
list.removeAll([null])
def ans = list.join()
Run Code Online (Sandbox Code Playgroud)

所需的结果是一个连接的字符串,其中省略了空值.

cde*_*zaq 11

你可以这样做:

def ans = [part1, part2, part3].findAll({it != null}).join()
Run Code Online (Sandbox Code Playgroud)

根据Groovy Truth,您可以将闭包缩小到仅{it}取决于列表项的评估方式,但这应该会使它更紧凑.

注意:GDK javadocs是一个很好的资源.


epi*_*ian 6

如果您使用findAll没有参数.它将返回每个"真实"值,所以这应该工作:

def ans = [part1, part2, part3].findAll().join()
Run Code Online (Sandbox Code Playgroud)

请注意,findAll将过滤掉空字符串(因为它们在布尔上下文中被评估为false),但在这种情况下无关紧要,因为空字符串不会添加任何内容join():)

如果这是一个简化的问题,并且您希望保留空字符串值,则可以使用.findResults{ it }