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 );

}












目录
相关文章
|
前端开发 API Go
golang ES From size 分页查询 和 Scroll 分页查询 demo
golang ES From size 分页查询 和 Scroll 分页查询 demo
|
SQL 前端开发
stream排序导致pageHelper分页失效处理
现有一查询会员上课记录的需求,要求按照上课时间进行倒序排列,考虑到后期数据量很多,使用逻辑层进行排序,但是前端小姐姐反应说查询的总记录数不正确.测试库中每页查询20条,实际所有数据总共37条,但是返回的总记录数竟然是20条,说明pageHelper分页失效.
stream排序导致pageHelper分页失效处理
|
存储 SQL Java
java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)
java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)
java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)
|
开发框架 算法 Java
【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)(上)
【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)(上)
【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)(上)
|
存储 安全 Java
【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)(下)
【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)(下)
|
存储 并行计算 算法
【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)(中)
【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)(中)
【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)(中)
|
Java 安全 NoSQL
Guava中针对集合的 filter和过滤功能
Guava中针对集合的 filter和过滤功能
2569 0