Printemps de Données PageImpl de ne pas retourner à la page avec la bonne taille?

Je suis en train de créer un nouveau Page à l'aide d'une liste d'objets récupérés à partir de la base de données. J'ai d'abord obtenez tous les éléments à partir de la DB, de les convertir en un Flux de données, puis utiliser lambda pour filtrer les résultats. Alors j'ai besoin d'une Page avec un certain nombre d'éléments, cependant, l'instanciation d'un nouveau PageImpl ne semble pas renvoyer une page avec la bonne taille.

Voici mon code:

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);

Voici une capture d'écran de débogage:

Printemps de Données PageImpl de ne pas retourner à la page avec la bonne taille?

Remarque la taille de l'Paginable objet est fixé à 20 et il comprend qu'il a besoin de 4 pages pour rendre le 70 éléments, mais il renvoie à l'ensemble de la liste.

Ce qui me manque?

Modifier répondre au commentaire de Thomas:

Je comprends comment utiliser la Page pour revenir simplement une tranche de données. Le code que j'ai montré a ma tentative d'utiliser une lambda expression de filtre de ma collection. Le problème pour moi est que je veux utiliser Java 8 lambda pour interroger la base de données via Spring Data JPA. Im utilisé pour VB.NET's et de l'Entité function(x) les expressions de requête et je me demandais comment faire la même chose avec Spring JPA.

Dans mon référentiel, Im en utilisant extends JpaRepository<Produtos, Integer>, QueryDslPredicateExecutor<Produtos> qui me donne accès à findAll(Predicate,Pageable). Toutefois, le Prédicat n'est pas tapé donc je ne peux pas tout simplement utiliser p -> p.getProdNome().contains("uio") dans la requête. Je suis l'aide de SQL Server et de la mise en veille prolongée.

OriginalL'auteur dubonzi | 2014-11-03