В Hazelcast реализован PagingPredicate
, который помогает получать данные постранично.
Есть ли возможность получить данные со смещением и лимитом? (Не страница за страницей)
В Hazelcast реализован PagingPredicate
, который помогает получать данные постранично.
Есть ли возможность получить данные со смещением и лимитом? (Не страница за страницей)
Существует BetweenPredicate, который достигнет того, что вы ищете.
SqlPredicate
, но это может быть неэффективно. Если это карта, вы можете добавить упорядоченный индекс в поле, по которому вам нужна сортировка.
- person diginoise; 13.06.2018
Я не нашел лучшего решения, чем рассчитать и получить две страницы с помощью PagingPredicate и получить подсписок из этого результата, чтобы получить данные со смещением и ограничением, как в базах данных SQL.
Пример метода:
public Set<M> findOffsetValues(int offset,int limit) {
PagingPredicate pagingPredicate = new PagingPredicate<>(getDefaultComporator(), limit);
pagingPredicate.setPage(offset / limit);
List<M> page = new ArrayList<>(itemsCacheMap.values(pagePredicate));
pagePredicate.nextPage();
page.addAll(itemsCacheMap.values(pagePredicate));
int startIndex = offset % limit;
return new LinkedHashSet<>(CollectionUtil.saveSublist(page, startIndex, startIndex + limit));
}
Вспомогательный метод CollectionUtil.saveSublist
public static <E> List<E> saveSublist(List<E> list, int fromIndex, int toIndex) {
int checkedFromIndex = list.size() == 0
? 0
: fromIndex >= list.size() ? list.size() - 1 : fromIndex;
int checkedToIndex = toIndex > list.size() ? list.size() : toIndex;
return list.subList(checkedFromIndex, checkedToIndex);
}