Mau*_*uli 1 java collections iterator
import java.util.Collection;
import example.Event;
public interface Query
{
public boolean hasMore ();
public Collection<Event> getNext ( long count ) throws Exception;
}
Run Code Online (Sandbox Code Playgroud)
这是我想要实现的界面.
实现应该是这样的:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我在想的是hasMore()和getNext()之间的关系.在这两种情况下,我都要评估过滤器是否与列表中的元素匹配.可能我不知道给定列表的实现,所以它可能是一个昂贵的操作.显然我不能从迭代器中使用hasNext(),因为我必须检查Event是否符合给定的条件.在我当前的实现中,我有两个不同的迭代器和当前位置,如果getNext()的迭代器的位置大于hasMore()的位置,则hasMore()的位置向上移动.
我真正想做的是克隆当前的迭代器,我将反过来将其用于hasMore(),但这显然是不可能的.
这个问题有更优雅的解决方案吗?
不要折磨自己:-)然后使用这个:
Iterables.filter(Iterable,Predicate)
它会为您解决这些问题.
如果您没有Iterable中的数据,只有Iterator,请参阅相应的类迭代器.如果您需要自己实现Iterator,可能有助于在同一个包中扩展AbstractIterator.
然后,如果您真的想要检索结果块,可以使用Itera*类的partition()方法.
| 归档时间: |
|
| 查看次数: |
2475 次 |
| 最近记录: |