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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 四舍五入使java保留2位小数示例讲解

    java 四舍五入使java保留2位小数示例讲解

    这篇文章主要介绍了java四舍五入使java保留2位小数示例,大家参考使用
    2013-12-12
  • MyBatis框架简介及入门案例详解

    MyBatis框架简介及入门案例详解

    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码,本文将作为最终篇为大家介绍MyBatis的使用
    2022-08-08
  • Java实现冒泡排序与双向冒泡排序算法的代码示例

    Java实现冒泡排序与双向冒泡排序算法的代码示例

    这篇文章主要介绍了Java实现冒泡排序与双向冒泡排序算法的代码示例,值得一提的是所谓的双向冒泡排序并不比普通的冒泡排序效率来得高,注意相应的时间复杂度,需要的朋友可以参考下
    2016-04-04
  • SpringBoot2.1 RESTful API项目脚手架(种子)项目

    SpringBoot2.1 RESTful API项目脚手架(种子)项目

    这篇文章主要介绍了SpringBoot2.1 RESTful API项目脚手架(种子)项目,用于搭建RESTful API工程的脚手架,只需三分钟你就可以开始编写业务代码,不再烦恼于构建项目与风格统一,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • spring-boot-maven-plugin 配置有啥用

    spring-boot-maven-plugin 配置有啥用

    这篇文章主要介绍了spring-boot-maven-plugin 配置是干啥的,这个是SpringBoot的Maven插件,主要用来打包的,通常打包成jar或者war文件,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • SpringMVC @RequestMapping注解应用方法示例讲解

    SpringMVC @RequestMapping注解应用方法示例讲解

    通过@RequestMapping注解可以定义不同的处理器映射规则,下面这篇文章主要给大家介绍了关于SpringMVC中@RequestMapping注解用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • java通过Jsoup爬取网页过程详解

    java通过Jsoup爬取网页过程详解

    这篇文章主要介绍了java通过Jsoup爬取网页过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 详解SpringBoot中5种类型参数传递和json数据传参的操作

    详解SpringBoot中5种类型参数传递和json数据传参的操作

    当涉及到参数传递时,Spring Boot遵循HTTP协议,并支持多种参数传递方式,这些参数传递方式可以根据请求的不同部分进行分类,
    2023-12-12
  • IDEA如何在当前类中查找方法快捷键

    IDEA如何在当前类中查找方法快捷键

    这篇文章主要介绍了IDEA如何在当前类中查找方法快捷键问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • JAVA JVM运行时数据区详解

    JAVA JVM运行时数据区详解

    这篇文章主要介绍了JVM运行时数据区划分原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09

最新评论