利用java反射给集合其中的某个属性做模糊匹配进行过滤

本文介绍了一种使用Java Stream API和反射机制实现的模糊匹配方法,该方法能够在集合中根据指定属性进行模糊搜索,适用于文件名或其他字符串属性的快速查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  /** 根据filterName以list中fileName属性进行模糊匹配
     * @param list 需要过滤的集合
     * @param fileName 属性名称
     * @param fileterName 模糊匹配的值
     * @return
     */
    public static List filterByNameLike(List list,final String fileName,final String fileterName)
    {
        log.info("filterByNameLike now!");
        if (null == list || list.isEmpty())
        {
            return list;
        }
        log.info("filterByNameLike list {} ",JSON.toJSONString(list));
        log.info("str1",fileName,"str2",fileterName);
        list = (List) list.stream().filter(o->checkObjectFile(o,fileName,fileterName)).collect(Collectors.toList());
        return list;
    }
     /**
     *  根据fileterName模糊匹配某属性的输出值
	* @param list 需要过滤的集合
     * @param fileName 属性名称
     * @param fileterName 模糊匹配的值
     * @return
     */
    public static Boolean checkObjectFile(Object o,final String fileName,final String fileterName)
    {
        Class c = o.getClass();
        String methodName = "get"  + StringUtil.firstUpperCase(fileName);
        Method declaredMethod = null;
        String invokeStr = "";
        try
        {
            declaredMethod = c.getDeclaredMethod(methodName, null);
        }
        catch (NoSuchMethodException e)
        {
            log.error("没有找到该方法:{" + methodName + "} filterByNameLike error",e);
        }
        try
        {
            invokeStr = declaredMethod.invoke(o).toString();
        }
        catch (IllegalAccessException e)
        {
            log.error("invoke执行失败!",e);
        }
        catch (InvocationTargetException e)
        {
            log.error("invoke执行失败!",e);
        }
        log.info("invokeStr {}",invokeStr);
        return nameQueryLike(invokeStr,fileterName);
    }
     /**
     * @param name
     * @param listName 被模糊查询的字符串
     * @return
     */
    public static boolean nameQueryLike(final String name,final String listName)
    {
        log.info("nameQueryLike {} str1",name + " ,str2{} " + listName);

        boolean flag =  name.contains(listName);
        log.info("nameQueryLike boolean {} ",flag);
        return flag;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值