Java中的迭代器问题

lak*_*001 0 java iterator

首先,为了让您理解这个问题,我将简要解释一下我的项目:

我有一个名为的类Pair,它基本上创建了类型

Pair<String,Double>
Run Code Online (Sandbox Code Playgroud)

并且有一个getFirst()和分别getSecond()返回StringDouble值的方法.

然后我有另一个名为的类,Package它基本上包含一个列表Pairs,并实现了Iterable接口,因此我可以通过列表进行迭代:

Package<Pair<String,Double>> package;
List <Pair<String,Double>> list;
Run Code Online (Sandbox Code Playgroud)

我要的是sumdoubles每个Pair使用iterator().

迭代器的定义如下Package:

public Iterator<E> iterator() {

        return this.iterator();
    }
Run Code Online (Sandbox Code Playgroud)

我尝试了两种不同的方法,在两种情况下都产生了:

Exception in thread "main" java.lang.StackOverflowError
    at Package.iterator(Package.java:98)
Run Code Online (Sandbox Code Playgroud)

这是第一个:

public static double packageWeight(Package<Pair<String, Double>> package) {

    double sum = 0;
    Pair<String, Double> pair;

    while (package.iterator().hasNext()) {

        pair = package.iterator().next();
        sum = sum + pair.getSecond();

    }

    return sum;
}
Run Code Online (Sandbox Code Playgroud)

第二个:

public static double packageWeight(Package<Pair<String, Double>> package) {

    double sum = 0;
    Pair<String, Double> pair;

    Iterator<Pair<String,Double>> it = Package.iterator();

    while (it.hasNext()) {

        pair = it.next();
        sum = sum + pair.getSecond();

    }

    return sum;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:为了得到这个错误我做错了什么?

And*_*ner 5

直接原因StackOverflowError是您正在调用该方法:

public Iterator<E> iterator() {

        return this.iterator();
    }
Run Code Online (Sandbox Code Playgroud)

你需要在这里调用一个不同的方法,例如return list.iterator()package.iterator()(除了它package不是Java中的有效标识符,因为它是一个关键字).