Как отфильтровать объект Spring * Page <Entity>с помощью java8's filter () и вернуть Page <Entity> - PullRequest
0 голосов
/ 23 апреля 2019

Я звоню в базу данных с пользовательским запросом dsl и получаю Page<Product> с findAll() вызовом hibernate. У меня есть фильтр с именем filterValidProducts, который вызывает внешнюю службу и будет фильтровать элементы из Page<Product> на основе ответа от внешней службы. Я не могу найти правильный коллектор, который будет держать отфильтрованный Page<Product>.

Что я замечаю, так это то, что, если я передаю какой-то размер страницы, это ограничивает отклик этим размером страницы, и я фактически не могу получить ожидаемые значения для totalElements, когда я передаю size в свой фильтр.

Я попробовал следующий код: -

public ResponseWrapper<Product> listProducts(ProductFilter productFilter){
    Page<Product> entityPage = productDAO.list(productFilter);
    List<ProductEntity> productEntityList = entityPage.getContent().stream()
                        .filter(filterValidProducts)
                        .collect(Collectors.toList());
    Pageable pageable = PageRequest.of(productFilter.getPage(), 
productFilter.size());
    Page<ProductEntity> productEntityFiltered=
            new PageImpl<>(productEntityList , pageable, productEntityList .size());
    ResponseWrapper<Product> responseWrapper =
            productTransformer.transformPage(productEntityFiltered, productFilter);

    return responseWrapper;
}

Вот как ProductFilter выглядит

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ProductFilter {
    private Long clientId;
    private Integer page;
    private Integer size;
    private Long productId;
    private ProductType productType;
}

Я хочу отфильтровать Page<Product> без преобразования в List<ProductEntity>

totalElements из entityPage - 168. Размер по умолчанию для Pageable - 25.

Фактический:

После фильтрации productEntityList он имеет 14 totalElements.

Если я запрашиваю с размером для Pageble как 3, после фильтрации productEntityList будет иметь 3 элемента.

Ожидаемое:

Если я запрашиваю с размером для Pageble как 3, totalElements все равно должен быть 14 с несколькими страницами с размером 3.

Я чувствую, что если я смогу применить функцию filterValidProducts к entityPage и правильно собрать в Page<Product> обновленный totalElements на основе фильтра, то эта проблема будет решена.

Спасибо за чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...