我有一个想要转换为Iterator<TypeA>
的Iterator<TypeB>
。 TypeA和TypeB不能直接相互转换,但是我可以编写一条规则来转换它们。我该怎么做?我应该扩展并覆盖Iterator<TypeA>
的next,hasNext和remove方法吗?
最佳答案
您无需自己编写。 Guava (以前是Google馆藏)涵盖了Iterators.transform(...)
您提供了迭代器和一个将TypeA转换为TypeB的函数,就可以完成了。
Iterator<TypeA> iterA = ....;
Iterator<TypeB> iterB = Iterators.transform(iterA, new Function<TypeA, TypeB>() {
@Override
public TypeB apply(TypeA input) {
TypeB output = ...;// rules to create TypeB from TypeA
return output;
}
});