Disons que j’ai le référentiel suivant:
public interface UserRepository extends JpaRepository { @Query("select u from User u") Stream streamAllPaged(Pageable pageable); }
Et je veux effectuer une recherche:
public Page findAllUsers(Pageable page) { Page page = null; try (Stream users = userRepository.streamAllPaged(page)) { Set users = users.filter(u -> user.getName().equals("foo")) .collect(Collectors.toSet()); //create page from set? } }
Évidemment, je pourrais utiliser une sous-liste et insérer manuellement des formats de page, etc.
Je dirais que votre cas d’utilisation n’a pas beaucoup de sens ici. Si vous voulez finir avec une Page
de résultats, commencer par un Stream
est tout simplement inefficace. Vous pouvez facilement atteindre votre résultat final attendu avec ceci:
public interface UserRepository extends CrudRepository { Page findByName(Ssortingng name, Pageable pageable); }
Cela ferait en sorte de ne lire que le nombre de noms que vous avez initialement demandé. L’utilisation d’un Stream
ici altère complètement le point car le filtrage sur le Stream
nécessite le chargement en mémoire de toutes User
instances d’ User
pour invoquer le prédicat. Vous voulez absolument laisser la firebase database ne renvoyer que les valeurs qui correspondent.