我需要一些关于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>
而不是从头开始编写自己的实现.
您可以通过委托给集合的迭代器以简单的方式手动编写它:
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)