com.google.common.collect.Iterables过滤和分页实现

简介: 过滤和分页实现
+关注继续查看

使用Gradle: com.google.guava:guava:16.0.1 jar文件

通过com.google.common.collect.Iterables和com.google.common.base.Predicate功能实现简单条件查询过滤







完整代码:


/**

* query monitor zknodes list
* @param currentPageNum
* @param pageSize
* @param nodeName
* @return
*/
@RequestMapping(value = "/list", method = RequestMethod.GET)
public ResponseEntity<PageableRetVO<List<MonitorNodesParam>>> getMonitorZnodeList(
@RequestParam(value = "currentPageNum", required = false) Integer currentPageNum,
@RequestParam(value = "pageSize", required = false) Integer pageSize,
@RequestParam(value = "nodeName", required = false) String nodeName){

final String nodeNameQry = nodeName;
PageableRetVO<List<MonitorNodesParam>> pageableRetVO =
new PageableRetVO<>();
try {
createConnectZk();
List<MonitorNodesParam> znodes =
zkFacade.readConfigFromZk();
// 1.filter
List<MonitorNodesParam> filteredList = Lists.newArrayList();
if(StringUtils.isNotEmpty(nodeNameQry)){
Iterable<MonitorNodesParam> filteredIter = Iterables.
filter(znodes, new Predicate<MonitorNodesParam>() {
@Override
public boolean apply(MonitorNodesParam input) {
if (StringUtils.isNotEmpty(nodeNameQry) && input.getNodeName().contains(nodeNameQry)) {
return true;
}
else {
return false;
}
}
});
for(MonitorNodesParam filtered:filteredIter){
filteredList.add(filtered);
}
}
else{
filteredList = znodes;
}

// 2.page
int totalCount = filteredList.size();
pageableRetVO.setTotalCount(totalCount);
pageableRetVO.setPageNum((currentPageNum==
null?0:currentPageNum) > 0 ? currentPageNum : 1);
pageableRetVO.setPageSize((pageSize ==
null ? 0 : pageSize) <= 0 ? 20 : pageSize);
int totalPagesNum = BaseUtils.getPagesNum(filteredList.size(), pageableRetVO.getPageSize());
if(pageableRetVO.getPageNum()<=totalPagesNum){
filteredList = filteredList.subList((pageableRetVO.getPageNum()-
1) * pageableRetVO.getPageSize(), Math.min(filteredList.size(),(pageableRetVO.getPageNum())*pageableRetVO.getPageSize()));
pageableRetVO.setList(filteredList);
}
else{
pageableRetVO.setList(
new ArrayList<MonitorNodesParam>());
}
pageableRetVO.setRetCode(
0);
}
catch (Exception e) {
logger.error(e.getMessage());
pageableRetVO.setRetCode(-
1);
pageableRetVO.setErrorMsg(e.getMessage());
}
return new ResponseEntity<>(pageableRetVO, HttpStatus.OK);

}












目录
相关文章
|
4月前
pageable 使用自定义list实现分页
pageable 使用自定义list实现分页
|
7月前
|
前端开发 API Go
golang ES From size 分页查询 和 Scroll 分页查询 demo
golang ES From size 分页查询 和 Scroll 分页查询 demo
|
8月前
|
SQL 前端开发
stream排序导致pageHelper分页失效处理
现有一查询会员上课记录的需求,要求按照上课时间进行倒序排列,考虑到后期数据量很多,使用逻辑层进行排序,但是前端小姐姐反应说查询的总记录数不正确.测试库中每页查询20条,实际所有数据总共37条,但是返回的总记录数竟然是20条,说明pageHelper分页失效.
stream排序导致pageHelper分页失效处理
|
10月前
|
Java Linux Go
知识分享之Golang——Bleve中查询时指定具体字段Field和权重
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
86 0
知识分享之Golang——Bleve中查询时指定具体字段Field和权重
|
10月前
|
关系型数据库 MySQL
ES复杂查询-结果过滤, 排序,分页
ES复杂查询-结果过滤, 排序,分页
|
存储 SQL Java
java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)
java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)
java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)
|
开发框架 算法 .NET
C#/Entity Frame Core使用Linq进行分页.skip().Take()的使用方法
C#/Entity Frame Core使用Linq进行分页.skip().Take()的使用方法
205 0
C#/Entity Frame Core使用Linq进行分页.skip().Take()的使用方法
相关产品
云迁移中心
推荐文章
更多