我需要一些关于在Java中使用Iterable<T>
的建议。
我有以下课程:
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>
的一些即时实现,而不是从头开始编写我自己的实现。
答案 0 :(得分:5)
您可以通过委托给集合的迭代器以简单的方式手动编写它:
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();
}
答案 1 :(得分:3)
您只能使用收藏集扩展您的ValidatorChain
:
public class ValidatorChain extends ArrayList<Validator>{
//...
}
现在它是可迭代的,因为扩展了ArrayList,它本身是可迭代的