Я звоню в базу данных с пользовательским запросом 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
на основе фильтра, то эта проблема будет решена.
Спасибо за чтение.