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

5 java collections iterator

我需要一些关于Iterable<T>Java 使用的建议.

我有以下课程:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要创建一个类ValidatorChain,如下所示:

public class ValidatorChain{
    //Contains Collection<Validator>

    // and we can iterate over it with for-each loop in high-to-low priority order
}
Run Code Online (Sandbox Code Playgroud)

也许我应该覆盖一些即时实现,Iterable<T>而不是从头开始编写自己的实现.

ass*_*ias 5

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

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

如果您需要对其进行排序,您可以对validators集合进行排序或获取副本:

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

或者使用Java 8:

 public Iterator<Validator> iterator() {
    return validators.stream().sorted().collect(toList()).iterator();
  }
Run Code Online (Sandbox Code Playgroud)