在那种情况下我真的需要实现迭代器吗?
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();
}
我需要一些关于 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();
}