java 过滤list的几种方式

java中 过滤list的几种方式

方式一:使用java 8语法:stream+反射

 List<Student3>student3List=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<Student3> newStudents=student3List.stream().filter(new Predicate<Student3>() {
            @Override
            public boolean test(Student3 student) {
                return student.getName().equals("黄鹤");
            }
        }).collect(Collectors.toList());

        int size=newStudents.size();

抽取为通用的过滤方法:

List<Student3> newStudents = filterList(student3List);
public static List filterList(List student3List) {
        return (List) student3List.stream().filter(new Predicate<Object>() {
                @Override
                public boolean test(Object student) {
                    return ReflectHWUtils.getObjectValue(student,"name").equals("阿猛");
                }
            }).collect(Collectors.toList());
    }

进一步抽取:

List<Student3> newStudents=filterList(student3List,"name","阿猛");
public static List filterList(List student3List,String column,String columnValue) {
        return (List) student3List.stream().filter(new Predicate<Object>() {
                @Override
                public boolean test(Object student) {
                    return ReflectHWUtils.getObjectValue(student,column).equals(columnValue);
                }
            }).collect(Collectors.toList());
    }

方式二:遍历+反射

List<Student3> 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

 Iterable<Student3 >student3Iterator= Iterables.filter(student3List,new com.google.common.base.Predicate<Student3>(){
            @Override
            public boolean apply(Student3 student3) {
                return student3.getName().equals("攀博士");
            }
        });

转载于:https://my.oschina.net/huangweiindex/blog/1838715

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值