Hazelcast смещение Предикат - PullRequest
0 голосов
/ 13 июня 2018

В Hazelcast был реализован PagingPredicate, который помогает получать данные постранично.

Есть ли возможность получать данные со смещением и лимитом?(Не постранично)

Ответы [ 2 ]

0 голосов
/ 13 августа 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);
}
0 голосов
/ 13 июня 2018

Существует BetweenPredicate , который достиг бы того, что вы ищете.

...