import java.util.Collection;
import example.Event;
public interface Query
{
public boolean hasMore ();
public Collection<Event> getNext ( long count ) throws Exception;
}
Это интерфейс, который у меня есть, который я хочу реализовать.
Реализация должна быть такой:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import example.Event;
import example.Query;
public class ListQuery implements Query {
public ListQuery(List<Event> events, String filter)
throws FilterParseException {
// events is the list of given events
// filter is a string representation of the filter to apply
}
public Collection<Event> getNext(long count) throws Exception {
// returns max. count next entries which match given filter
}
public boolean hasMore() {
// returns if there are more elements matching the given filter
}
}
Я думаю о связи между hasMore() и getNext(). В обоих случаях я должен оценить, соответствует ли фильтр элементу списка. Возможно, я не знаю реализации данного списка, поэтому это может быть дорогостоящей операцией. Очевидно, я не могу просто использовать hasNext() из итератора, потому что мне нужно проверить, соответствует ли событие заданным критериям. В моей текущей реализации у меня есть два разных итератора и текущая позиция, где позиция для hasMore() перемещается вверх, если позиция итератора для getNext() больше, чем позиция для hasMore().
Что я на самом деле хотел бы сделать, так это клонировать текущий итератор, который я, в свою очередь, использовал бы для hasMore(), но это, очевидно, невозможно.
Есть ли более элегантное решение этой проблемы?