有更好的方法吗?注意:part1
,part2
和part3
是在别处定义的字符串变量(它们可以为null)。
def list = [part1, part2, part3]
list.removeAll([null])
def ans = list.join()
所需的结果是一个连接的字符串,其中省略了空值。
答案 0 :(得分:11)
你可以这样做:
def ans = [part1, part2, part3].findAll({it != null}).join()
可能能够将结果缩小到{it}
,具体取决于您的列表项根据Groovy Truth进行评估的方式,但这会使其更加紧张
注意:GDK javadocs是很棒的资源。
答案 1 :(得分:5)
如果您使用没有参数的findAll
。它将返回每个“真实”值,因此这应该有效:
def ans = [part1, part2, part3].findAll().join()
请注意findAll
将过滤掉空字符串(因为它们在布尔上下文中被评估为false),但在这种情况下无关紧要,因为空字符串不会向{{{ 1}}:)
如果这是一个简化的问题,并且您希望保留空字符串值,则可以使用findResults
join()
。
答案 2 :(得分:2)
或者,您可以使用inject
进行折叠操作:
def ans = [part1, part2, part3].inject('') { result, element ->
result + (element ?: '')
}
这将迭代整个列表并将每个连续元素连接到结果,并使用逻辑将空字符串用于null元素。
答案 3 :(得分:1)
您可以使用grep
:
groovy:000> list = ['a', 'b', null, 'c']
===> [a, b, null, c]
groovy:000> list.grep {it != null}.join()
===> abc