2012-03-25 7 views
0

У меня есть список (ArrayList, infact) типа HColumn<ColName, ColValue>. Теперь я хочу реализовать iterator(), который выполняет итерацию по этой коллекции таким образом, что на итерации она выдает соответствующий ColValue от каждого HColumn.Реализация такого итератора?

Этот объект HColumn<ColName, ColValue> определен во внешней библиотеке, используемой моим java-приложением.

Как я могу это сделать, если это возможно?

В настоящее время, чтобы создать такой повторяемый, я создал новый список, содержащий соответствующий ColValues, который, я думаю, не очень хорош, с точки зрения производительности & эффективность.

ответ

4

Как было предложено @jordeu:

public class IteratorColValueDecorator implements Iterator<ColValue> { 
     private Iterator<HColumn<ColName, ColValue>> original; 
     //constructor taking the original iterator 
     public ColValue next() { 
      return original.next().getValue(); 
     } 
     //others simply delegating 
} 

Или, мое первоначальное предложение:

public class ColValueIterator implements Iterator<ColValue> { 
    private List<HColumn<ColName, ColValue>> backingList; 
    //constructor taking List<...> 
    int currentIndex = 0; 
    public ColValue next() { 
     return backingList.get(currentIndex++).getColumn(); 
    } 
    //hasNext() implemented by comparing the currentIndex to backingList.size(); 
    //remove() may throw UnsupportedOperationException(), 
    //or you can remove the current element 
} 
+0

Я бы просто сделать итератор обертку, так что я хотел бы получить итератор > на конструкторе. – jordeu

+0

Да, это лучший вариант. Я добавляю это. 6 часов ожидания в аэропорту, очевидно, искалечили мое мышление ООП :) – Bozho

+0

Большое спасибо Божо! –

Смежные вопросы