首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LimitFilter的比较器不起作用

使用LimitFilter的比较器不起作用
EN

Stack Overflow用户
提问于 2015-12-24 16:02:19
回答 1查看 363关注 0票数 0

我正在尝试使用limitFilter从缓存中检索结果:

代码语言:javascript
复制
class Student {
    long studentId;
}

class StudentComparator implements Comparator<Student> {
    public int compare(Student o1, Student o2) {
       return o1.getStudentId() - o2.getStudentId();
    }
}

StudentComparator studentComparator = new StudentComparator();
EntryComparator comparator = new EntryComparator(studentComparator,EntryComparator.CMP_VALUE);
LimitFilter limitFilter = new LimitFilter(AlwaysFilter.INSTANCE, 5)
limitFilter.setComparator(comparator);
Set studentSet = null;
do {
   studentSet = studentCache.entrySet(limitFilter);
   .....
   // print the set
   .....
   limitFilter.nextPage();
} while (studentSet.size() > 0)

根据API

代码语言:javascript
复制
 public void setComparator(Comparator comparator) : Set the Comparator
 used to partition the values into pages. 

因此,我期望limitfilter会使用比较器对数据进行排序,但它似乎没有这样做。例如,我有20个学生,studentId的范围从1到20。我希望有4个studentSet的do/while循环的范围分别为: 1-5,6-10,11-15,16-20。但是有时在第一个studentSet中有一个Id为13的学生,或者在最后一个studentSet中有一个Id为2的学生,等等。

如果有人遇到这个问题,请告诉我你的想法。

EN

回答 1

Stack Overflow用户

发布于 2016-10-20 20:48:35

根据LimitFilter.setComparator(Comparator comparator)的JavaDoc (至少对于Coherence 12.2.1 )

此方法仅供查询处理器使用。客户端不应修改此属性的内容。

要获得所描述的结果,您应该调用(在循环中):

代码语言:javascript
复制
studentSet = studentCache.entrySet(limitFilter, comparator);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34449348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档