Guest User

Untitled

a guest
Dec 16th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. @Autowired QueryService queryService // service dependency
  2.  
  3. Page getFilteredPaginatedResults(int pageSize, Result result) {
  4. // stored results
  5. List<Result> results = new ArrayList<>();
  6.  
  7. // initial query
  8. Page currentPage = queryService.query(pageSize, result);
  9. while(results.size() < pageSize) {
  10. // load each result into results list
  11. for (Result result : currentPage.getResults()) {
  12. if (test(result)) {
  13. results.add(result);
  14. }
  15. }
  16. if (currentPage.hasMore()) {
  17. Results currentLastResult = currentPage.getResults().get(currentPage.getResults().size() - 1);
  18. currentPage = querySerivce.query(pageSize, currentLastResult);
  19. } else {
  20. break;
  21. }
  22. }
  23.  
  24. // potentially overshoot a little (max overshoot by pageSize) and then limit
  25. List<Result> finalResults = results.stream().limit(pageSize).collect(Collectors.toList());
  26.  
  27. // determine hasMore state
  28. boolean hasMore;
  29. if (finalResults.size() < pageSize) { // no more since less than pageSize
  30. hasMore = false;
  31. } else if (results.size() > finalResults.size()) { // checks for rest of page has another positive filter case
  32. hasMore = true;
  33. } else {
  34. hasMore = checkIfFilteredhasMore(currentPage, pageSize); // pass in next page already queried
  35. }
  36.  
  37. return new Page(results, hasMore);
  38. }
  39.  
  40. boolean checkIfFilteredHasMore(Page currentPage, int pageSize) {
  41. // keep getting results and exit once a successful test is found else return false
  42. // check currentPage which has already been queried
  43. for (Result result : currentPage.getResults()) {
  44. if (test(result)) {
  45. return true;
  46. }
  47. }
  48. while(currentPage.hasMore()) {
  49. currentPage = queryService.query(pageSize, currentResults.get(currentResults.size() - 1));
  50. for (Result result : currentPage.getResults()) {
  51. if (test(result)) {
  52. return true;
  53. }
  54. }
  55. }
  56. return false;
  57. }
Add Comment
Please, Sign In to add comment