java8如何根據(jù)某一屬性條件快速篩選list中的集合
根據(jù)某一屬性條件快速篩選list中的集合
1、創(chuàng)建個Student對象
public class Student {
private String name;//姓名
private Integer age;//年齡
private int sex;//性別
private String professional;//專業(yè)
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("**************************目的:只取專業(yè)為計算機行業(yè)的集合*************************");
// allList = allList.stream().filter(Student -> Student.getProfessional().equals("計算機")).collect(Collectors.toList());
// allList.forEach(Student -> {
// System.out.println(Student.getName());
// });
System.out.println("**************************目的:取專業(yè)為計算機和人文專業(yè)的集合*************************");
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循環(huán)遍歷取集合好用的多呢~ give a like?
list 根據(jù)實體屬性搜索
工具類如下所示,主要使用了泛型,反射
入?yún)ⅲ?/strong>
list,待查找的 list
field: 要根據(jù) list 中的哪個屬性來查找 ,如上面的 TestModel 中的 name/value
value: 要查找的值為什么,如"demo", 查找 list 中 name = demo 的那個數(shù)據(jù)
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);
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java通過MySQL驅動攔截器實現(xiàn)執(zhí)行sql耗時計算
本文主要介紹了java通過MySQL驅動攔截器實現(xiàn)執(zhí)行sql耗時計算,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
Java 圖解Spring啟動時的后置處理器工作流程是怎樣的
spring的后置處理器有兩類,bean后置處理器,bf(BeanFactory)后置處理器。bean后置處理器作用于bean的生命周期,bf的后置處理器作用于bean工廠的生命周期2021-10-10
淺談SpringSecurity注解與AOP切面執(zhí)行順序
這篇文章主要介紹了淺談SpringSecurity注解與AOP切面執(zhí)行順序,引入Spring Security后,在Controller的方法中會出現(xiàn)Spring Security的方法注解與AOP同時存在的問題,這是就會設計順序問題,需要的朋友可以參考下2023-10-10
VSCode中開發(fā)JavaWeb項目的詳細過程(Maven+Tomcat+熱部署)
這篇文章主要介紹了VSCode中開發(fā)JavaWeb項目(Maven+Tomcat+熱部署),本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下2022-09-09

