当前位置: 首页 > news >正文

java 过滤list的几种方式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

相关文章:

  • java中的重载(overload)和重写(override)区别
  • 这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理。...
  • 雷林鹏分享:PHP 多维数组
  • 联系我过户这些快到期的域名
  • Maven使用过程中遇到的问题,及解决方案
  • linux磁盘管理
  • spring配置中classpath: 与classpath*:的区别
  • 虚拟机(Virtual Machine)和容器(Container)的对比
  • Linux第四章 进程
  • css选择器有哪些
  • Hbase备份
  • 前端战五渣学前端——初探Parcel急速打包
  • Android程序员搞Web之HTNL(一)
  • mysql-proxy安装过程 (转)
  • Day3LJY
  • SegmentFault for Android 3.0 发布
  • 0x05 Python数据分析,Anaconda八斩刀
  • 2017-09-12 前端日报
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • conda常用的命令
  • Django 博客开发教程 16 - 统计文章阅读量
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Fastjson的基本使用方法大全
  • Iterator 和 for...of 循环
  • Java的Interrupt与线程中断
  • PHP的类修饰符与访问修饰符
  • Python3爬取英雄联盟英雄皮肤大图
  • python学习笔记 - ThreadLocal
  • socket.io+express实现聊天室的思考(三)
  • Spring核心 Bean的高级装配
  • Spring框架之我见(三)——IOC、AOP
  • Vue--数据传输
  • Vultr 教程目录
  • 读懂package.json -- 依赖管理
  • 对JS继承的一点思考
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端设计模式
  • 如何解决微信端直接跳WAP端
  • 实习面试笔记
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • #pragma multi_compile #pragma shader_feature
  • (3)(3.5) 遥测无线电区域条例
  • (Java)【深基9.例1】选举学生会
  • (Python) SOAP Web Service (HTTP POST)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (Ruby)Ubuntu12.04安装Rails环境
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (分布式缓存)Redis持久化
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (推荐)叮当——中文语音对话机器人