我正嘗試使用從數據庫檢索到的對象列表創建新的Page
。首先,我從數據庫中獲取所有元素,將其轉換爲Stream,然後使用lambda篩選結果。然後,我需要一個帶有一組元素的頁面,但是,實例化一個新的PageImpl
似乎沒有返回具有正確大小的頁面。Spring Data 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);
下面是調試截圖:
注意在可分頁對象的大小設置爲20,它知道它需要4頁渲染70個元素,但它返回整個列表。
我錯過了什麼?
編輯回答托馬斯提出的意見:
我知道如何使用頁面返回只是一個數據的切片。我展示的代碼是我嘗試使用lambda表達式來過濾我的集合。對我來說問題是我想用Java 8的lambda來通過Spring Data JPA查詢數據庫。我習慣VB.NET和實體function(x)
查詢表達式,並想知道如何做到這一點與Spring JPA。
在我的倉庫,進出口使用extends JpaRepository<Produtos, Integer>, QueryDslPredicateExecutor<Produtos>
這使我獲得findAll(Predicate,Pageable)
。但是,謂詞不是輸入的,所以我不能在查詢中簡單地使用p -> p.getProdNome().contains("uio")
。我正在使用SQL Server和Hibernate。
不錯!我會用我正在做的事情給我一個機會。 – stites 2015-10-04 03:31:18
您可以向我提供您用於PageImpl的代碼嗎?我現在面臨同樣的問題! – user3127109 2016-06-15 10:10:09
已添加代碼。請注意,在我的情況下需要執行此實現,因爲我正在處理REST服務,並且默認實現對我來說不起作用,在您的情況下可能會有所不同。 – dubonzi 2016-06-23 14:11:24