【发布时间】:2014-12-30 11:52:05
【问题描述】:
我正在尝试使用从数据库中检索到的对象列表创建一个新的Page。首先,我从数据库中获取所有元素,将其转换为 Stream,然后使用 lambda 过滤结果。然后我需要一个包含一定数量元素的页面,但是,实例化一个新的 PageImpl 似乎并没有返回一个大小正确的页面。
这是我的代码:
List<Produtos> listaFinal;
Stream<Produtos> stream = produtosRepository.findAll().stream();
listaFinal = stream.filter(p -> p.getProdNome().contains("uio")).collect(Collectors.toList());
long total = listaFinal.size();
Page<Produtos> imp = new PageImpl<>(listaFinal,pageable,total);
这是调试的截图:
请注意,Pageable 对象中的大小设置为 20,它知道它需要 4 个页面来呈现 70 个元素,但它会返回整个列表。
我错过了什么?
编辑回答托马斯的评论:
我了解如何使用 Page 仅返回一部分数据。我展示的代码是我尝试使用 lambda 表达式来过滤我的集合。对我来说问题是我想使用 Java 8 的 lambda 通过 Spring Data JPA 查询数据库。我习惯了 VB.NET 和 Entity function(x) 查询表达式,想知道如何使用 Spring JPA 做同样的事情。
在我的存储库中,我使用extends JpaRepository<Produtos, Integer>, QueryDslPredicateExecutor<Produtos>,这使我可以访问findAll(Predicate,Pageable)。但是,谓词没有输入,所以我不能简单地在查询中使用p -> p.getProdNome().contains("uio")。我正在使用 SQL Server 和 Hibernate。
【问题讨论】:
标签: java spring spring-mvc spring-data spring-data-jpa