我正在使用自定义查询dsl调用数据库,并通过Page<Product>
调用获得findAll()
来休眠。我有一个名为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
上,那么这个问题将得到解决。
非常感谢您阅读。