java8如何根据某一属性条件快速筛选list中的集合
更新时间:2022年01月26日 10:28:58 作者:MyXieZhiXin
这篇文章主要介绍了java8如何根据某一属性条件快速筛选list中的集合,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
根据某一属性条件快速筛选list中的集合
1、创建个Student对象
public class Student { private String name;//姓名 private Integer age;//年龄 private int sex;//性别 private String professional;//专业 public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getProfessional() { return professional; } public void setProfessional(String professional) { this.professional = professional; } public Student(String name, Integer age, int sex, String professional) { super(); this.name = name; this.age = age; this.sex = sex; this.professional = professional; }
2、编写测试类
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class StreamTest { public static void main(String[] args) { List<Student> allList = new ArrayList<Student>(); Student st1 = new Student("小王",26,1,"计算机"); allList.add(st1); Student st2 = new Student("小张",21,1,"电气"); allList.add(st2); Student st3 = new Student("小红",22,1,"人文"); allList.add(st3); Student st4 = new Student("小李",23,1,"计算机"); allList.add(st4); System.out.println("**************************目的:只取专业为计算机行业的集合*************************"); // allList = allList.stream().filter(Student -> Student.getProfessional().equals("计算机")).collect(Collectors.toList()); // allList.forEach(Student -> { // System.out.println(Student.getName()); // }); System.out.println("**************************目的:取专业为计算机和人文专业的集合*************************"); List<String> str=new ArrayList<>(); str.add("计算机"); str.add("人文"); allList = allList.stream().filter(Student -> str.contains(Student.getProfessional())).collect(Collectors.toList()); allList.forEach(Student -> { System.out.println(Student.getName()); }); }
结果如下图所示:
perfect ! 是不是比for循环遍历取集合好用的多呢~ give a like?
list 根据实体属性搜索
工具类如下所示,主要使用了泛型,反射
入参:
list,待查找的 list
field
: 要根据 list 中的哪个属性来查找 ,如上面的 TestModel 中的 name/value
value
: 要查找的值为什么,如"demo", 查找 list 中 name = demo 的那个数据
clazz
: 泛型类的描述信息,也就是 TestModel
代码
public static <T> List<T> containsByField(List<T> list ,String field,Object value,Class<T> clazz){ List<T> res = new ArrayList<>(); try { // 通过反射获取对应的属性 Field dbField = clazz.getDeclaredField(field); // 设置属性为可访问 dbField.setAccessible(true); for (T t : list) { // 遍历list,获取到对应属性的值 Object o = dbField.get(t); if(value.equals(o)){ // 如值和预期想等的话,则加入到返回值中 res.add(t); } } } catch (NoSuchFieldException e) { // 如果不存在这个字段,则直接返回空 return res; } catch (IllegalAccessException e) { e.printStackTrace(); } return res; }
测试
List<TestModel> c = containsByField(list, "name", "demo", TestModel.class);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot2.1 RESTful API项目脚手架(种子)项目
这篇文章主要介绍了SpringBoot2.1 RESTful API项目脚手架(种子)项目,用于搭建RESTful API工程的脚手架,只需三分钟你就可以开始编写业务代码,不再烦恼于构建项目与风格统一,感兴趣的小伙伴们可以参考一下2018-12-12spring-boot-maven-plugin 配置有啥用
这篇文章主要介绍了spring-boot-maven-plugin 配置是干啥的,这个是SpringBoot的Maven插件,主要用来打包的,通常打包成jar或者war文件,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下2022-08-08SpringMVC @RequestMapping注解应用方法示例讲解
通过@RequestMapping注解可以定义不同的处理器映射规则,下面这篇文章主要给大家介绍了关于SpringMVC中@RequestMapping注解用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2022-09-09详解SpringBoot中5种类型参数传递和json数据传参的操作
当涉及到参数传递时,Spring Boot遵循HTTP协议,并支持多种参数传递方式,这些参数传递方式可以根据请求的不同部分进行分类,2023-12-12
最新评论