Chr*_*Geo 9 java spring java-8 spring-data spring-data-jpa
假设我有以下存储库:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u")
Stream<User> streamAllPaged(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
我想进行搜索:
public Page<User> findAllUsers(Pageable page) {
Page<User> page = null;
try (Stream<User> users = userRepository.streamAllPaged(page)) {
Set<User> users = users.filter(u -> user.getName().equals("foo"))
.collect(Collectors.toSet());
//create page from set?
}
}
Run Code Online (Sandbox Code Playgroud)
显然我可以使用子列表并手动插入页面大小等但我想应该有更"标准"的方法来做到这一点?
Oli*_*ohm 11
我认为你的用例在这里没有多大意义.如果你想最终得到一个Page结果,从a开始Stream只是效率低下.您可以通过以下方式轻松实现预期的最终结果:
public interface UserRepository extends CrudRepository<User, Long> {
Page<User> findByName(String name, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
这样可以确保只读取您最初请求的名称数量.在Stream这里使用完全颠覆了这一点,因为过滤Stream将需要将所有 User实例加载到内存中以调用谓词.您肯定希望让数据库执行此操作,只返回首先匹配的值.
| 归档时间: |
|
| 查看次数: |
3940 次 |
| 最近记录: |