你能在Groovy列表中打印变量名而不是值吗



如果我在Groovy中得到一个包含2个或多个具有某个值的变量的列表,并且我想看看它是否包含给定的文本字符串,我将执行以下操作:

def msg = '''
 Hello Mars!
'''
def msg1 = '''
 Hello world!
'''

def list = [msg, msg1]
list.findAll { w -> 
    if(w.contains("Hello"))
    {
        println w
    }
    else
    {
        println "Not there"
    }
}

但是,我不打印值,而是打印包含文本的变量名。这可以通过列表实现吗?还是我需要制作一张地图?

您需要使用Map,因为从键到值的映射。

def msg = '''
 Hello Mars!
'''
def msg1 = '''
 Hello world!
'''
def map = [msg: msg, msg1: msg1]
map.findAll { key, value -> 
    if (value.contains("Hello")) {
        println key
    }
    else {
        println "Not there"
    }
}

如果您将其作为Groovy脚本运行,您可以使用binding归档而不是变量列表,但您需要在没有def的情况下分配变量(因此它们成为绑定的一部分)。类似于:

aaa = 'Hello World!'
bbb = 'Goodbye all!'
ccc = 'Hello Mars!'
this.binding.variables.each { var ->
    if (var.value ==~ /Hello.*/)
        println "$var.key contains 'Hello'"
}

输出:

aaa contains 'Hello'
ccc contains 'Hello'

最新更新