我正在寻找一个简洁的表达式来评估列表中的所有项目是Longs还是可以转换为Longs.我正在寻找一个紧凑的表达,但我更喜欢可读性而不仅仅是代码高尔夫.
例子:
assert expr([1,2,'3'])
assert expr([1,'fish',3]) == false
assert expr([null]) == false
assert expr([' ', 17]) == false
Run Code Online (Sandbox Code Playgroud)
为了便于阅读,我会做类似的事情:
def canBeLongs(things) {
things.every {
try { Long.valueOf(it); true }
catch (e) { false }
}
}
assert canBeLongs([1,2,'3'])
assert !canBeLongs([1,'fish',3])
assert !canBeLongs([null])
assert !canBeLongs([' ', 17])
Run Code Online (Sandbox Code Playgroud)
对于lulz来说,这个其他解决方案非常糟糕,但它非常简洁,涵盖了所有测试用例:
def f(l) { l.join() ==~ /[0-9]*/ }
assert f([1,2,'3'])
assert !f([1,'fish',3])
assert !f([null])
assert !f([' ', 17])
Run Code Online (Sandbox Code Playgroud)