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

}

时间: 2024-10-26 23:05:50

com.google.common.collect.Iterables过滤和分页实现的相关文章

Contoso学习(三):排序、过滤及分页

在上一个课程中,我们已经学习了如何使用 EF 对 Student 实体进行增.删.改.查处理.这次的课程我们将对学生的 Index 页面加入排序.过滤以及分页的功能.还要创建一个页面完成简单的分组. 下面的截图展示了完成之后的页面,列的标题作为链接支持用户通过点击完成排序,点击标题可以在升序和降序之间进行切换. 3-1  在 Students 的 Index 页面增加列标题链接 为 Index 页面增加排序的功能,我们需要修改 Student 控制器的 Index 方法,还需要为 Student

DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)_jquery

Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 主要功能 分页,即时搜索和排序 几乎支持任何数据源:DOM, javascript, Ajax 和 服务器处理 支持不同主题 DataTables, jQuery UI, Bootstrap, Foundation 各式各样的扩展: Editor, TableTools, FixedColumns -- 丰富多样的option和强大的API 支持国际化 超过2900+个单元测试 免

Contoso 大学 - 3 - 排序、过滤及分页

原文 Contoso 大学 - 3 - 排序.过滤及分页 目录 Contoso 大学 - 使用 EF Code First 创建 MVC 应用  原文地址:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application 在上一个课程中,我们已经学习了如何使用

Google将关闭邮件过滤及归档服务

[搜狐IT消息]北京时间8月22日消息,据国外媒体报道,Google将很快关闭受到用户欢迎的 垃圾邮件过滤和电子邮件归档服务 Postini,并将把Postini用户迁到Google Apps.Postini用户超过2600万,其中许多是企业用户.用户利用Postini扫描恶意电子邮件和垃圾电子邮件.目前,Postini支持微软的Exchange和Lotus Notes,因此用户并非只能使用Gmail电子邮件帐户.从今年秋季起,Google将向用户通报他们必须迁移.Google将在2013年完成

在系统中使用Bean Validation验证参数

为什么要使用Bean Validation?  当我们实现某个接口时,都需要对入参数进行校验.例如下面的代码 public String queryValueByKey(String parmTemplateCode, String conditionName, String conditionKey, String resultName) { checkNotNull(parmTemplateCode, "parmTemplateCode not null"); checkNotNu

跟着实例学习ZooKeeper的用法: Curator扩展库

还记得Curator提供哪几个组件吗? 我们不妨回顾一下: Recipes Framework Utilities Client Errors Extensions 前面的例子其实前五个组件都涉及到了, 比如Utilities例子的TestServer, Client里的CuratorZookeeperClient, Errors里的ConnectionStateListener等. 还有最后一个组件我们还没有介绍,那就是Curator扩展组件. Recipes组件包含了丰富的Curator应用

Google-Guava Concurrent包里的Service框架浅析

原文地址  译文地址 译者:何一昕 校对:方腾飞 概述 Guava包里的Service接口用于封装一个服务对象的运行状态.包括start和stop等方法.例如web服务器,RPC服务器.计时器等可以实现这个接口.对此类服务的状态管理并不轻松.需要对服务的开启/关闭进行妥善管理.特别是在多线程环境下尤为复杂.Guava包提供了一些基础类帮助你管理复杂的状态转换逻辑和同步细节. 使用一个服务 一个服务正常生命周期有: Service.State.NEW Service.State.STARTING

数据量你造吗-JAVA分页

学习的心态第一,解行要相应.其实<弟子规>在"余力学文"当中,一开头就强调了这一个重点."不力行,但学文,长浮华,成何人",这个没有侥幸的,只要学了不去做,无形当中就会增长傲慢,自己不知道.-<弟子规> Written In The Font     JAVA-Web 基础那块,我自己也准备.搞哪里,优化哪里然后带给大家终结.谢谢     分页虽易,好却难.数据量,怎么办? Content     分页(Paging),就像个切面.能把这个切

使用Guava提供的filter过滤集合

 正常情况下,我们声明一个List需要如下代码 List<String> list = new ArrayList<>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); 使用Google Guava提供的Lists类声明就方便很多,代码如下 package com.google.common.collect; //导入jar包 List<String>