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 (), но это, очевидно, невозможно.
Есть ли более элегантное решение этой проблемы?