java过滤_java 过滤list的几种方式
java中 过滤list的几种方式
方式一:使用java 8语法:stream+反射
Liststudent3List=new ArrayList<>();
Student3 student3=new Student3();
student3.setId(1);
student3.setName("攀博士");
student3.setStudyNo("228332");
student3.setAge(20);
student3List.add(student3);
student3=new Student3();
student3.setId(2);
student3.setName("黄鹤");
student3.setStudyNo("228333");
student3.setAge(22);
student3List.add(student3);
student3=new Student3();
student3.setId(3);
student3.setName("阿猛");
student3.setStudyNo("228334");
student3.setAge(25);
student3List.add(student3);
List newStudents=student3List.stream().filter(new Predicate() {
@Override
public boolean test(Student3 student) {
return student.getName().equals("黄鹤");
}
}).collect(Collectors.toList());
int size=newStudents.size();
抽取为通用的过滤方法:
List newStudents = filterList(student3List);
public static List filterList(List student3List) {
return (List) student3List.stream().filter(new Predicate() {
@Override
public boolean test(Object student) {
return ReflectHWUtils.getObjectValue(student,"name").equals("阿猛");
}
}).collect(Collectors.toList());
}
进一步抽取:
List newStudents=filterList(student3List,"name","阿猛");
public static List filterList(List student3List,String column,String columnValue) {
return (List) student3List.stream().filter(new Predicate() {
@Override
public boolean test(Object student) {
return ReflectHWUtils.getObjectValue(student,column).equals(columnValue);
}
}).collect(Collectors.toList());
}
方式二:遍历+反射
List newStudents = getObjFromList(student3List,"name","攀博士");
/***
* 获取指定值的对象
*
* @param list
* @param property
* @param valueCompare
* @return
*/
public static List getObjFromList(List list, String property,
Object valueCompare) {
if (ValueWidget.isNullOrEmpty(list)) {
return null;
}
List filterList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
Field keyf = null;
keyf = ReflectHWUtils.getSpecifiedField(obj.getClass(), property);
if (null == keyf) {
continue;
}
keyf.setAccessible(true);
try {
Object value22 = keyf.get(obj);
if (ReflectHWUtils. isSameBySimpleTypes(value22, valueCompare)) {
filterList.add(obj);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return filterList;
}
反射类 ReflectHWUtils 见
https://github.com/liuyu520/io0007
的com.common.util.ReflectHWUtils
方式三:使用guava
Iterablestudent3Iterator= Iterables.filter(student3List,new com.google.common.base.Predicate(){
@Override
public boolean apply(Student3 student3) {
return student3.getName().equals("攀博士");
}
});
java过滤_java 过滤list的几种方式相关推荐
- java 深克隆_Java实现深克隆的两种方式
序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...
- java下文_java实现文件下载的两种方式
本文实例为大家分享了java实现文件下载的具体代码,供大家参考,具体内容如下 public HttpServletResponse download(String path, HttpServletR ...
- websocket java 例子_java 实现websocket的两种方式实例详解
目录 一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring ...
- Java异步非阻塞编程的几种方式
简介: Java异步非阻塞编程的几种方式 一. 从一个同步的Http调用说起 一个很简单的业务逻辑,其他后端服务提供了一个接口,我们需要通过接口调用,获取到响应的数据. 逆地理接口:通过经纬度获取这个 ...
- 【java】Java运行时动态生成类几种方式
1.概述 转载:Java运行时动态生成类几种方式 这里发现自己不知道的,原来Java 还能自己编译自己,学到了. 最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则.这就要求根据数据库数据动态生 ...
- java的如何创建js_[Java教程]JS创建事件的三种方式(实例)
[Java教程]JS创建事件的三种方式(实例) 0 2016-05-11 14:00:16 1.普通的定义方式 οnclick="Sfont=prompt('请在文本框中输入红色','红色' ...
- Java中线程的创建有两种方式
Java中继承thread类与实现Runnable接口的区别 Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过 ...
- Java实现回文串的四种方式
Java实现回文串的两种方式 1.什么是回文串? "回文串"是一个正读和反读都一样的字符串,如"level"或者"noon"等就是回文串. ...
- Java中遍历Map集合的5种方式总结
这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 方式一 通过Map.keySet使用iterator遍历 ...
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...
最新文章
- api分层内部外部 spring_java - Spring boot restful API分层架构验证 - SO中文参考 - www.soinside.com...
- CodeForces - 1366D Two Divisors(数论)
- 不冲突的端口范围_网络中IP地址发生冲突故障怎么办
- struts2、hibernate工作原理和流程
- Oracle中varchar2(20)和varchar2(20 byte)区别
- Linux下的网卡驱动程序的编写过程(转)
- Pr 视频效果:模糊与锐化
- 逻辑漏洞(基本概念、爆破)
- 项目过程管理(五)需求文档
- 使用阿里云实现短信发送功能
- Go 语言入门系列:指针的基本应用
- Recoil的简单实践和思考
- Windows中怎么下载桌面便签小工具 便签小工具简单使用教程
- 计算机网络复习04——网络层
- 微信小程序 web-view 在ios显示空白页面
- python 比价_爬虫+网站开发实例:电影票比价网
- Reflex WMS入门系列二十三:几个库存相关的报表
- js中box和box()的区别
- php主动推送弹幕_【转载】如何使用PHP构建一个高性能的弹幕后端服务
- 1024程序员节福利第一波