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

标签 java collections iterator

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

我有以下类(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;
    }
}

我需要创建一个类 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> 的一些即时实现而不是从头开始编写我自己的。

最佳答案

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

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();
  }

关于java - 在那种情况下我真的需要实现迭代器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544589/

相关文章:

C++ 流迭代器

Java Chat系统协议(protocol)设计,如何判断消息类型?

java - 如何在没有错误警告的情况下在excel中输出id号

java - java中可以通过反射设置字段的 transient 属性/标志吗?

java - 从 main 方法创建 eclipse 项目

java - 为什么 map 不是真正的集合?

c++ - 如何检查容器是否稳定

java - 使用java中的比较器自定义排序

java - 用于保存大型 char/byte/int 数组的内存存储的最佳库?

c++ - 文件istream迭代器理解