在那种情况下我真的需要实现迭代器吗?

Do I really need to implement iterator in that case?

我需要一些关于 Java 中 Iterable<T> 用法的建议。

我有以下 class:

public abstract class Validator implements Comparable<Validator>{
    public abstract boolean validate();
    public abstract int getPriority();

    @Override
    public int compareTo(Validator o) {
        return getPriority() > o.getPriority() ? -1 :
                getPriority() == o.getPriority() ? 0 : 
                    1;
    }
}

我需要创建一个 class ValidatorChain 如下:

public class ValidatorChain{
    //Contains Collection<Validator>

    // and we can iterate over it with for-each loop in high-to-low priority order
}

也许我应该重写 Iterable<T> 的某些即时实现,而不是从头开始编写自己的实现。

您只能使用集合扩展您的 ValidatorChain

public class ValidatorChain extends ArrayList<Validator>{
    //...
}

现在它是可迭代的,因为扩展了本身可迭代的 ArrayList

您可以通过委托给集合的迭代器以一种简单的方式手动编写它:

public class ValidatorChain implements Iterable<Validator> {
  Collection<Validator> validators = ...;
  public Iterator<Validator> iterator() {
    return validators.iterator();
  }
}

如果您需要对其进行排序,您可以对 validators 集合进行排序或复制一份:

  public Iterator<Validator> iterator() {
    List<Validator> sorted = new ArrayList<> (validators);
    Collections.sort(sorted);
    return sorted.iterator();
  }

或 Java 8:

 public Iterator<Validator> iterator() {
    return validators.stream().sorted().collect(toList()).iterator();
  }