groovy中的范围迭代和数组索引

groovy中的范围迭代和数组索引,groovy,Groovy,随着groovy的使用越来越多,我觉得编写for(){}循环有点不方便。我几乎总是避免Javafor(){}循环,而选择groovyeach{}循环。但是有一种情况是,我无法避免()的{} 在我们的项目中,我们不会将迭代器返回到某个类的成员列表中。我们返回列表的大小,然后获取(索引)方法,如以下摘录所示: class ClassWithList { private def tempList = ["a","b","c"] public int getNumberOfItems(

随着groovy的使用越来越多,我觉得编写
for(){}
循环有点不方便。我几乎总是避免Java
for(){}
循环,而选择groovy
each{}
循环。但是有一种情况是,我无法避免()的
{}

在我们的项目中,我们不会将迭代器返回到某个类的成员列表中。我们返回列表的大小,然后获取(索引)方法,如以下摘录所示:

class ClassWithList
{
    private def tempList = ["a","b","c"]

    public int getNumberOfItems()
    {
        return 3;
    }

    public String getItem(int pIndex)
    {
    return tempList[pIndex];
    }
}
调用类首先调用
getNumberOfItems()
,然后使用
getItem()
迭代列表:

ClassWithList obj = new ClassWithList();
for(int i=0;i<obj.getNumberOfItems();i++)
    println obj.getItem(i)
如果列表中没有元素,则会出现此问题,在这种情况下,范围将为
(0..-1)
。当尝试读取负索引为
-1
的项目时,它会倒计时并导致
阵列索引超出边界异常。例如,下面的代码导致
ArrayIndexOutOfBoundsException

class AdHocTests {
    public static main(def args)
    {   
        ClassWithList obj = new ClassWithList();
        (0..obj.getNumberOfItems()-1).each {
            println obj.getItem(it)
        }
    }   
}

class ClassWithList
{
    private def tempList = []

    public int getNumberOfItems()
    {
        return 0;
    }

    public String getItem(int pIndex)
    {
    return tempList[pIndex];
    }
}
如何获取
(0..x)。在这种情况下,每个{}()
都使用
x=0
?或者没有出路,我应该坚持传统的
for(){}
。groovy是否提供了惊喜?

根据,您可以使用半开放范围:

(0..<obj.getNumberOfItems()).each {
    println obj.getItem(it)
}
(0..根据,您可以使用半开范围:

(0..<obj.getNumberOfItems()).each {
    println obj.getItem(it)
}

(0..首先,在Groovy中,您不需要指定private属性,因为它是默认创建的。此外,getter和setter也是默认创建的,所以您只需调用它们

如果我理解了你的问题,你只想在列表中重复

清洁您的课堂将是:

类和列表{

List tempList = ["a","b","c"]
}

//为了迭代列表,您只需要使用each方法:

ClassWithList obj = new ClassWithList()  //; Not necessary in groovy!!
(obj.tempList).each { def element ->
    println element
}
答案将是:[a、b、c]


希望对您有所帮助

首先,在Groovy中,您不需要指定private属性,因为它是默认创建的。而且,getter和setter也是默认创建的,所以您只需调用它们

如果我理解了你的问题,你只想在列表中重复

清洁您的课堂将是:

类和列表{

List tempList = ["a","b","c"]
}

//为了迭代列表,您只需要使用each方法:

ClassWithList obj = new ClassWithList()  //; Not necessary in groovy!!
(obj.tempList).each { def element ->
    println element
}
答案将是:[a、b、c]

希望能帮助你