了解Groovy中的findAll

时间:2016-02-03 14:03:22

标签: java groovy

请考虑以下代码:

String emptyString = '''

        '''
println "After trimming empty string has size: " + emptyString.trim().size()
println "Number of non empty elements in array: " + ([emptyString, 'kshitiz'].findAll({ it.trim() != 0}).size())

我希望输出为1。但是输出是:

After trimming empty string has size: 0
Number of non empty elements in array: 2

我怀疑我可能会遗漏一些基本的东西,但却无法弄清楚是什么。

2 个答案:

答案 0 :(得分:1)

对于两个列表条目,闭包IE = navigator.userAgent.match(/msie/i)中的表达式都返回true,无论it.trim()返回的字符串是否为空,因此findAll不会过滤掉任何内容和大小findAll返回的列表是2。

{it.trim() != 0}{it.trim().length() != 0}(您可以在Groovy中执行,因为{it.trim() != ''}使用equals方法)这样的修补程序可以正常工作但不是必需的。 Groovy将空(零长度)字符串视为true和非空字符串为true,请参阅these examples from groovy-lang.org

==

删除适得其反的assert 'a' assert !'' def nonEmpty = 'a' assert "$nonEmpty" def empty = '' assert !"$empty" 给出了

!= 0

,评估为1,成功过滤掉空条目。

答案 1 :(得分:1)

您的代码应为:

 String emptyString = '''

    '''
 println "After trimming empty string has size: " + emptyString.trim().size()
 println "Number of non empty elements in array: " + ([emptyString, 'kshitiz'].findAll({ it.trim().length() != 0}).size())

注意使用length()方法。你没有比较字符串的长度。