java8如何根据某一属性条件快速筛选list中的集合

网友投稿 451 2022-08-31


java8如何根据某一属性条件快速筛选list中的集合

目录根据某一属性条件快速筛选list中的集合1、创建个Student对象2、编写测试类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 allList = new ArrayList();

Student st1 = new Student("小王",26,1,"计算机");

vPZtPPjoN 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("*********http://*****************目的:取专业为计算机和人文专业的集合*************************");

List 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 List containsByField(List list ,String field,Object value,Class clazz){

List res = new ArrayList<>();

try {

// 通过反射获取对应的属性

Field dbField = clazz.getDeclaredField(field);

// 设置属性为可访问

dbField.setAccessible(true);

for (T t : list) {

// 遍历list,获取到对应属性的值

Object o = dbField.get(t);

if(valuehttp://.equals(o)){

// 如值和预期想等的话,则加入到返回值中

res.add(t);

}

}

} catch (NoSuchFieldException e) {

// 如果不存在这个字段,则直接返回空

return res;

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return res;

}

测试

List c = containsByField(list, "name", "demo", TestModel.class);


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【说话人识别】基于mfcc特征和MEL滤波器实现语音识别含Matlab源码(语音信号MFCC特征提取)
下一篇:python os模块文件目录操作详解(python和java哪个更值得学)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~