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的几种方式相关推荐

  1. java 深克隆_Java实现深克隆的两种方式

    序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...

  2. java下文_java实现文件下载的两种方式

    本文实例为大家分享了java实现文件下载的具体代码,供大家参考,具体内容如下 public HttpServletResponse download(String path, HttpServletR ...

  3. websocket java 例子_java 实现websocket的两种方式实例详解

    目录 一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring ...

  4. Java异步非阻塞编程的几种方式

    简介: Java异步非阻塞编程的几种方式 一. 从一个同步的Http调用说起 一个很简单的业务逻辑,其他后端服务提供了一个接口,我们需要通过接口调用,获取到响应的数据. 逆地理接口:通过经纬度获取这个 ...

  5. 【java】Java运行时动态生成类几种方式

    1.概述 转载:Java运行时动态生成类几种方式 这里发现自己不知道的,原来Java 还能自己编译自己,学到了. 最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则.这就要求根据数据库数据动态生 ...

  6. java的如何创建js_[Java教程]JS创建事件的三种方式(实例)

    [Java教程]JS创建事件的三种方式(实例) 0 2016-05-11 14:00:16 1.普通的定义方式 οnclick="Sfont=prompt('请在文本框中输入红色','红色' ...

  7. Java中线程的创建有两种方式

    Java中继承thread类与实现Runnable接口的区别 Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过 ...

  8. Java实现回文串的四种方式

    Java实现回文串的两种方式 1.什么是回文串? "回文串"是一个正读和反读都一样的字符串,如"level"或者"noon"等就是回文串. ...

  9. Java中遍历Map集合的5种方式总结

    这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 方式一 通过Map.keySet使用iterator遍历 ...

  10. 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)

    读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...

最新文章

  1. api分层内部外部 spring_java - Spring boot restful API分层架构验证 - SO中文参考 - www.soinside.com...
  2. CodeForces - 1366D Two Divisors(数论)
  3. 不冲突的端口范围_网络中IP地址发生冲突故障怎么办
  4. struts2、hibernate工作原理和流程
  5. Oracle中varchar2(20)和varchar2(20 byte)区别
  6. Linux下的网卡驱动程序的编写过程(转)
  7. Pr 视频效果:模糊与锐化
  8. 逻辑漏洞(基本概念、爆破)
  9. 项目过程管理(五)需求文档
  10. 使用阿里云实现短信发送功能
  11. Go 语言入门系列:指针的基本应用
  12. Recoil的简单实践和思考
  13. Windows中怎么下载桌面便签小工具 便签小工具简单使用教程
  14. 计算机网络复习04——网络层
  15. 微信小程序 web-view 在ios显示空白页面
  16. python 比价_爬虫+网站开发实例:电影票比价网
  17. Reflex WMS入门系列二十三:几个库存相关的报表
  18. js中box和box()的区别
  19. php主动推送弹幕_【转载】如何使用PHP构建一个高性能的弹幕后端服务
  20. 1024程序员节福利第一波

热门文章

  1. DIY Arduino计步器
  2. deck.gl 调研
  3. 解决Eclipse4K屏下工具栏过小
  4. GNSS入门1-误差
  5. 有码变高清!AI一秒还原马赛克,杜克大学出品
  6. cpu,寄存器,控制器,运算器
  7. JSD-2204-Dubbo实现微服务调用-Seata-Day04
  8. C# 使用AD(Active Directory)验证内网用户名密码
  9. 基于(ztmap)BIM的数字孪生建造智慧机房管理后台展示系统
  10. C#的HTTP协议中POST与GET的区别