java过滤_java 过滤list的几种方式

本文介绍了在Java中使用Java 8 Stream API、反射和Guava库过滤List对象的三种方式,包括lambda表达式、反射方法调用和Predicate接口的应用。通过实例演示了如何根据姓名属性筛选学生对象。
摘要由CSDN通过智能技术生成

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("攀博士");

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值