从可迭代对象转换为页面对象

Convert from Iterable to Page Object

我有一个方法 returns 在 couchbase 存储库中找到的所有文档,结果是一个 Page<MyObject> 对象,这很好:

...
import org.springframework.data.domain.Page;

  Page<MyObject> myObjects = myRepo
      .findAll(new PageRequest(page == null ? 0 : page, size));
...

我还有另一种方法 returns a Iterable<MyObject> 如下所示。该方法运行良好,从 couchbase 检索到的结果正常。

...
  Bucket myBucket = myRepo.getCouchbaseOperations().getCouchbaseBucket();
  PrefixQuery field = SearchQuery.prefix(searchParameter);

  SearchQueryResult searchQueryResult = myBucket
    .query(new SearchQuery("text-search", field)
    .fields("name").explain());

  List <String> idList = new ArrayList<>();
  for (SearchQueryRow searchQueryRow : searchQueryResult.hits()) {
    idList.add(searchQueryRow.id());
  }

  Iterable<MyObject> myObjects = myRepo.findAll(idList);
...

我的问题是:如何将 Iterable<MyObject> myObjects 转换为 Page<MyObject> myObjects

我终于找到了解决方法,我将答案贴出来以防将来对任何人有所帮助。我通过以下方式实现了它:

Iterable<MyObject> myObjects = myRepo.findAll(idList);
List<MyObject> myObjectsList = IteratorUtils.toList(myObjects.iterator());
Page<MyObject> myObjectsPage = new PageImpl<MyObject>(
                                     myObjectsList,
                                     new PageRequest(page, size), 
                                     myObjectsList.size());