如何从以下类中删除元素:class [Ljava.lang.String?

时间:2014-11-18 04:38:40

标签: java collections groovy

我有这个groovy代码,我想删除第一个元素,但我不知道如何。 .drop(0)没有做任何事情而.remove(0)给了我一个错误:groovy.lang.MissingMethodException: No signature of method: [Ljava.lang.String;.remove() is applicable for argument types: (java.lang.Integer) values: [0] Possible solutions: reverse(), getAt(java.lang.Integer), reverse(boolean), drop(int), take(int) at Cert_RouteJob_exec_script_RouteJob.run(Cert_RouteJob_exec_script_RouteJob:16)

有人可以帮我解决如何删除第一个元素并解释一下吗?

        println job."Cert_Applications".getMetaClass()
        // result: org.codehaus.groovy.runtime.HandleMetaClass@50446a34[groovy.lang.MetaClassImpl@50446a34[class [Ljava.lang.String;]]
        println job."Cert_Applications".getProperties()
        // result: [class:class [Ljava.lang.String;, length:16]

        println job."Cert_Applications".inspect()
        // result: ['Accept', 'Afp', 'Exe', 'IA', 'Exe', 'IA', 'IA', 'Afp', 'Afp', 'Exe', 'IA', 'Exe', 'Exe', 'Afp', 'IA', 'Afp']
        println job."Cert_Applications".toString()
        // result: [Accept, Afp, Exe, IA, Exe, IA, IA, Afp, Afp, Exe, IA, Exe, Exe, Afp, IA, Afp]

        applications = job."Cert_Applications"

        println applications.size()
        // result: 16

        if (applications.size() > 0){

        println applications[0]
        // result: Accept
        // applications.remove(0)
        println applications.drop(0)
        // result: [Accept, Afp, Exe, IA, Exe, IA, IA, Afp, Afp, Exe, IA, Exe, Exe, Afp, IA, Afp]

        }

        println applications.inspect()
        // result: ['Accept', 'Afp', 'Exe', 'IA', 'Exe', 'IA', 'IA', 'Afp', 'Afp', 'Exe', 'IA', 'Exe', 'Exe', 'Afp', 'IA', 'Afp']

1 个答案:

答案 0 :(得分:2)

看起来applications是一个数组。数组是静态大小的。您无法删除元素并让数组缩小以考虑删除该元素。您可以使用List,但不能使用数组。

如果您只想将索引为零的值归零,则可以执行applications[0] = null之类的操作。

修改

你可以经历一些旋转,比如将数组转换为List,然后移除第一个元素,然后根据需要将其转换回数组。这可能看起来像这样......

// this will fail if applications has fewer than 2 elements.
// size checking omitted here for brevity
applications = (applications as List)[1..-1] as String[]

在使用之前,请确保您了解其中发生的情况。这可能是也可能不是你想做的事。

如果你真的不需要这个东西成为一个数组,你可以通过将它转换为List然后继续进行简化。而不是......

applications = job."Cert_Applications"

你可以这样做......

applications = job."Cert_Applications" as List

然后您可以执行applications.remove(0)之类的操作,从List

中移除第一个元素