按数组列表自定义分页
我想在java代码中创建一个数组列表的自定义分页
import org.springframework.data.domain.Sort; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Sort.Direction; ... int page = 0; int count = 8; String sortOrder = "desc"; String sortBy = "id"; Sort sort = new Sort(Direction.fromString(sortOrder), sortBy); PageRequest pageable = new PageRequest(page, count, sort); List impiantos = myService.findMyMethod(); // returned 30 objects Page pageImpianto = new PageImpl(impiantos, pageable, impiantos.size());
上面的脚本不会返回包含8个元素的页面。 为什么?
NB列表没有从db返回
你能帮助我吗?
我解决了这个解决方法。
import org.springframework.data.domain.Sort; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Sort.Direction; ... int page = 0; int count = 8; String sortOrder = "desc"; String sortBy = "id"; Sort sort = new Sort(Direction.fromString(sortOrder), sortBy); PageRequest pageable = new PageRequest(page, count, sort); List impiantos = myService.findMyMethod(); // returned 30 objects int max = (count*(page+1)>impiantos.size())? impiantos.size(): count*(page+1); Page pageImpianto = new PageImpl (impiantos.subList(page*count, max), pageable, impiantos.size());
我实现了一个新的自定义比较器类
import java.lang.reflect.Field; import java.util.Comparator; import java.util.Date; public class MyListComparator implements Comparator
我根据您自己的代码制作了自己的代码,以满足客户的要求,没有任何排序等等。谢谢
这就是Controller的样子
@RequestMapping(value="/zonas", method = RequestMethod.GET) public String zonas(ModelMap modelMap, @PageableDefault(size=3) Pageable pageable, ZonasFilter zonasFilter, Locale locale) { LOGGER.info("Cargando la vista del índice de Zonas."); List zonas; try { zonas = zonasService.loadAll(); int max = (pageable.getPageSize()*(pageable.getPageNumber()+1)>zonas.size())? zonas.size(): pageable.getPageSize()*(pageable.getPageNumber()+1); modelMap.addAttribute("zonas",new PageImpl (zonas.subList(pageable.getPageSize()*pageable.getPageNumber(), max), pageable, zonas.size())); } catch (ApiException e) { // TODO Auto-generated catch block e.printStackTrace(); List errors=e.getErrors(); for (ApiError apiError : errors) { modelMap.addAttribute("error", messages.getMessage(apiError.getMessage(), null, locale)); } } LOGGER.info("Vista del índice de Zonascargada."); return "zonas/index"; }
Flavio Troia’answer是错误的,当impiantos小于count并且页面大于1时,调用subList函数会出现exception,fromIndex(10)> toIndex(5),我自己创建了这样的代码,它可能是冗余,但对我来说,它很容易理解和正确〜
List shopCourseBizPojos = addCourseCoupons(mcCouponLists, shopCourseLists); if (pageable.getOffset() > shopCourseBizPojos.size()) { long total = 0L; PageImpl emptyPage = new PageImpl<>(Lists.newArrayList(), pageable, total); resultDo.setResult(emptyPage); return resultDo; } if (pageable.getOffset() <= shopCourseBizPojos.size() && pageable.getOffset() + pageable.getPageSize() > shopCourseBizPojos.size()) { List bizPojos = shopCourseBizPojos.subList(pageable.getOffset(), shopCourseBizPojos.size()); PageImpl pPage = new PageImpl<>(bizPojos, pageable, shopCourseLists.size()); resultDo.setResult(pPage); return resultDo; } List ucShopCourseBizPojos = shopCourseBizPojos.subList(pageable.getOffset(), pageable.getOffset() + pageable.getPageSize()); PageImpl pPage = new PageImpl<>(ucShopCourseBizPojos, pageable, shopCourseLists.size()); resultDo.setResult(pPage); return resultDo;