Я пытаюсь получить результат из кэша с помощью limitFilter:Компаратор с LimitFilter не работает
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
public void setComparator(Comparator comparator) : Set the Comparator
used to partition the values into pages.
Так что я ожидал, что limitfilter будет сортировать данные с помощью компаратор, но, похоже, это не так. Например, у меня есть 20 учеников со студенческим диапазоном от 1 до 20. Я ожидаю, что есть 4 studentSet с циклом do/while, который имеет диапазоны: 1-5, 6-10, 11-15, 16-20 соответственно. Но когда-нибудь есть Студент с Id 13 в первом studentSet или 2 в последнем studentSet и т.д.
Есть кто-нибудь сталкивался с этой проблемой, пожалуйста, дайте мне знать вашу идею
Является ли, что ваш первый набор студент не получает 1-5 записи, но некоторые случайные элементы, как 2, 6,3,12,1. В этом случае компаратор будет просто сортировать эти записи и помещать в первый набор учеников. Проверьте, что вы получаете как часть First Student Set. –
Да, у первого набора есть случайные записи. И я не думаю, что они отсортированы. Метод сортировки результата - NamedCache.entrySet (фильтр, компаратор). – user2747502