Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何过滤弹簧&x27;s页<;实体>;使用java8';s filter()和返回页<;实体>;_Java_Spring_Hibernate_Java 8 - Fatal编程技术网

如何过滤弹簧&x27;s页<;实体>;使用java8';s filter()和返回页<;实体>;

如何过滤弹簧&x27;s页<;实体>;使用java8';s filter()和返回页<;实体>;,java,spring,hibernate,java-8,Java,Spring,Hibernate,Java 8,我使用自定义查询dsl调用数据库,并使用findAll()调用hibernate获得一个Page。我有一个名为filterValidProducts的过滤器,它调用一个外部服务,并根据外部服务的响应过滤Page中的元素。我找不到合适的收集器来保存过滤后的页面 我注意到的是,如果我传递一些页面大小,它会将响应限制为该页面大小,并且当我将大小传递给我的过滤器时,我实际上无法获得totalElements的预期值 我尝试了以下代码:- public ResponseWrapper<Product

我使用自定义查询dsl调用数据库,并使用
findAll()
调用hibernate获得一个
Page
。我有一个名为
filterValidProducts
的过滤器,它调用一个外部服务,并根据外部服务的响应过滤
Page
中的元素。我找不到合适的收集器来保存过滤后的
页面

我注意到的是,如果我传递一些页面大小,它会将响应限制为该页面大小,并且当我将
大小
传递给我的过滤器时,我实际上无法获得
totalElements
的预期值

我尝试了以下代码:-

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;
}
我想在
页面
上进行筛选,而不将其转换为
列表

entityPage
中的
totalElements
为168。
Pageable
的默认大小为25

实际值:

过滤
productEntityList
后,它有14个
totalElements

如果我用大小查询
Pageble
为3,在过滤
productEntityList
后,它有3个元素

期望值:

如果我用大小查询
Pageble
为3,则
totalElements
仍应为14,且每个页面的大小为3

我觉得如果我能够应用
entityPage
上的功能
filterValidProducts
,并基于过滤器正确地收集
页面
更新的
totalElements
,那么这个问题就会解决


感谢您阅读本文。

totalElements
是您可以获得的元素数,但在第一次查询中获得的实际元素数默认为25。如果您需要获取更多,我认为您应该查询所有元素或执行一些SQL操作。@TranNgocKhoa我不需要获取更多,我只需要能够应用页上的过滤器,以减少并根据过滤器更新totalElements。另外,我应用的筛选器是一个外部服务,因此我无法向谓词添加任何queryDSL。您是否可以提供
ProductFilter
code?刚才did@TranNgocKhoa
totalElements
是您可以获得的元素数,但在第一次查询中获得的实际元素数默认为25。如果您需要获取更多,我认为您应该查询所有元素或执行一些SQL操作。@TranNgocKhoa我不需要获取更多,我只需要能够应用页上的过滤器,以减少并根据过滤器更新totalElements。另外,我应用的筛选器是一个外部服务,因此我无法向谓词添加任何queryDSL。您可以提供
ProductFilter
code吗?刚才@trannogockhoa做了
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ProductFilter {
    private Long clientId;
    private Integer page;
    private Integer size;
    private Long productId;
    private ProductType productType;
}