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

北京网站开发专员crm系统网站

北京网站开发专员,crm系统网站,个人网站空间一般多大,济南网站建设阝力荐聚搜网背景描述 在工作中,有时候,我们需要对list中是否包含了指定元素进行判断,但是,有时候又需要支持模糊匹配,这个时候怎么办呢? 比如权限,我们知道,权限不仅可以配置完整的路径&#…

背景描述

在工作中,有时候,我们需要对list中是否包含了指定元素进行判断,但是,有时候又需要支持模糊匹配,这个时候怎么办呢?

比如权限,我们知道,权限不仅可以配置完整的路径,也可以配置通配符。比如,系统管理员角色直接返回的权限是*。子公司A的管理员返回的是:departmentA:*的权限。子公司A的人事权限是:hrA:*。你自己登录系统后,返回的权限是:userA:view这个权限。类似这样的,一个人不止是只有一个权限。多个权限,那么这种情况下,想要判断集合中是否包含了指定元素,而且还需要模糊匹配,使用Java语言怎么写呢?凯哥(个人公众号:凯哥Java),接下来就讲讲怎么实现的。

思路:

  1. 简单匹配,如果list中包含了指定的元素(element)的时候,就直接返回;

  2. 如果list不包含,就开始模糊匹配

    循环list中每个元素:

     2.1. 如果元素中不包含【*】的时候,只需要简单的将list循环出来的数据和需要对比的元素进行equals比较即可;

    2.2:如果元素中包含了【*】的时候,就要进行第三步:深入匹配

  3.深入匹配

  将list循环出来的每个数据与需要匹配的元素每个字符进行比较。

具体代码如下:

一、定义函数接口,用来判断集合中是否包含指定元素

import java.util.List;
import java.util.function.BiFunction;/*** 函数式接口:判断集合中是否包含指定元素(模糊匹配)** <p>  参数:集合、元素  </p>* <p>  返回:是否包含  </p>** @author click33* @since 1.35.0*/
@FunctionalInterface
public interface SaHasElementFunction extends BiFunction<List<String>, String, Boolean> {}

二、开始进行对集合中是否包含了指定元素进行判断:

/*** 判断:集合中是否包含指定元素(模糊匹配)*/public SaHasElementFunction hasElement = (list, element) -> {// 空集合直接返回falseif(list == null || list.size() == 0) {return false;}// 先尝试一下简单匹配,如果可以匹配成功则无需继续模糊匹配if (list.contains(element)) {return true;}// 开始模糊匹配for (String patt : list) {if(SaFoxUtil.vagueMatch(patt, element)) {return true;}}// 走出for循环说明没有一个元素可以匹配成功return false;};

 简单匹配不成功后,开始模糊匹配:

/*** 字符串模糊匹配* <p>example:* <p> user* user-add   --  true* <p> user* art-add    --  false* @param patt 表达式* @param str 待匹配的字符串* @return 是否可以匹配*/public static boolean vagueMatch(String patt, String str) {// 两者均为 null 时,直接返回 trueif(patt == null && str == null) {return true;}// 两者其一为 null 时,直接返回 falseif(patt == null || str == null) {return false;}// 如果表达式不带有*号,则只需简单equals即可 (这样可以使速度提升200倍左右)if( ! patt.contains("*")) {return patt.equals(str);}// 深入匹配return vagueMatchMethod(patt, str);}	

元素中,不包含【*】,进行深入匹配:

/*** 字符串模糊匹配** @param pattern /* @param str    /* @return /*/private static boolean vagueMatchMethod( String pattern, String str) {int m = str.length();int n = pattern.length();boolean[][] dp = new boolean[m + 1][n + 1];dp[0][0] = true;for (int i = 1; i <= n; ++i) {if (pattern.charAt(i - 1) == '*') {dp[0][i] = true;} else {break;}}for (int i = 1; i <= m; ++i) {for (int j = 1; j <= n; ++j) {if (pattern.charAt(j - 1) == '*') {dp[i][j] = dp[i][j - 1] || dp[i - 1][j];} else if (str.charAt(i - 1) == pattern.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1];}}}return dp[m][n];}

完整的匹配代码:

/*** 判断:集合中是否包含指定元素(模糊匹配)*/public SaHasElementFunction hasElement = (list, element) -> {// 空集合直接返回falseif(list == null || list.size() == 0) {return false;}// 先尝试一下简单匹配,如果可以匹配成功则无需继续模糊匹配if (list.contains(element)) {return true;}// 开始模糊匹配for (String patt : list) {if(SaFoxUtil.vagueMatch(patt, element)) {return true;}}// 走出for循环说明没有一个元素可以匹配成功return false;};/*** 字符串模糊匹配* <p>example:* <p> user* user-add   --  true* <p> user* art-add    --  false* @param patt 表达式* @param str 待匹配的字符串* @return 是否可以匹配*/public static boolean vagueMatch(String patt, String str) {// 两者均为 null 时,直接返回 trueif(patt == null && str == null) {return true;}// 两者其一为 null 时,直接返回 falseif(patt == null || str == null) {return false;}// 如果表达式不带有*号,则只需简单equals即可 (这样可以使速度提升200倍左右)if( ! patt.contains("*")) {return patt.equals(str);}// 深入匹配return vagueMatchMethod(patt, str);}/*** 字符串模糊匹配** @param pattern /* @param str    /* @return /*/private static boolean vagueMatchMethod( String pattern, String str) {int m = str.length();int n = pattern.length();boolean[][] dp = new boolean[m + 1][n + 1];dp[0][0] = true;for (int i = 1; i <= n; ++i) {if (pattern.charAt(i - 1) == '*') {dp[0][i] = true;} else {break;}}for (int i = 1; i <= m; ++i) {for (int j = 1; j <= n; ++j) {if (pattern.charAt(j - 1) == '*') {dp[i][j] = dp[i][j - 1] || dp[i - 1][j];} else if (str.charAt(i - 1) == pattern.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1];}}}return dp[m][n];}

文章👉:凯哥个人博客


文章转载自:
http://featherlike.nrpp.cn
http://tampan.nrpp.cn
http://mellifluous.nrpp.cn
http://murmansk.nrpp.cn
http://vocality.nrpp.cn
http://vulvae.nrpp.cn
http://gynephobia.nrpp.cn
http://chevrolet.nrpp.cn
http://foursome.nrpp.cn
http://defilade.nrpp.cn
http://quirk.nrpp.cn
http://yoicks.nrpp.cn
http://histopathologic.nrpp.cn
http://district.nrpp.cn
http://ben.nrpp.cn
http://intermarry.nrpp.cn
http://denarius.nrpp.cn
http://blush.nrpp.cn
http://leukocytic.nrpp.cn
http://tyrannize.nrpp.cn
http://emir.nrpp.cn
http://swg.nrpp.cn
http://scalogram.nrpp.cn
http://ruijin.nrpp.cn
http://affront.nrpp.cn
http://haematein.nrpp.cn
http://ungrateful.nrpp.cn
http://bort.nrpp.cn
http://kartell.nrpp.cn
http://eupatorium.nrpp.cn
http://caretaker.nrpp.cn
http://septic.nrpp.cn
http://revolutionism.nrpp.cn
http://vorticity.nrpp.cn
http://lissome.nrpp.cn
http://bachelordom.nrpp.cn
http://voa.nrpp.cn
http://hydrogenize.nrpp.cn
http://sybaritism.nrpp.cn
http://given.nrpp.cn
http://biocytin.nrpp.cn
http://waiter.nrpp.cn
http://duotone.nrpp.cn
http://mercer.nrpp.cn
http://radically.nrpp.cn
http://macrocephalia.nrpp.cn
http://electrophoretogram.nrpp.cn
http://koppa.nrpp.cn
http://tokyo.nrpp.cn
http://isopterous.nrpp.cn
http://ostensibly.nrpp.cn
http://trabeated.nrpp.cn
http://fleetly.nrpp.cn
http://hade.nrpp.cn
http://trank.nrpp.cn
http://radiator.nrpp.cn
http://gdi.nrpp.cn
http://nemesis.nrpp.cn
http://organule.nrpp.cn
http://antilles.nrpp.cn
http://unfashionable.nrpp.cn
http://spoiler.nrpp.cn
http://oecist.nrpp.cn
http://kettledrum.nrpp.cn
http://brasil.nrpp.cn
http://camise.nrpp.cn
http://execrate.nrpp.cn
http://coprophobia.nrpp.cn
http://underrate.nrpp.cn
http://frumentaceous.nrpp.cn
http://quiet.nrpp.cn
http://zoolith.nrpp.cn
http://senatorship.nrpp.cn
http://hybridisable.nrpp.cn
http://pathbreaker.nrpp.cn
http://auxesis.nrpp.cn
http://liberationist.nrpp.cn
http://gaucho.nrpp.cn
http://gonion.nrpp.cn
http://dorsoventral.nrpp.cn
http://catling.nrpp.cn
http://deedless.nrpp.cn
http://valeta.nrpp.cn
http://heliotropin.nrpp.cn
http://epitheliomatous.nrpp.cn
http://gill.nrpp.cn
http://roupy.nrpp.cn
http://unchain.nrpp.cn
http://authoress.nrpp.cn
http://csf.nrpp.cn
http://systyle.nrpp.cn
http://bebung.nrpp.cn
http://phosphoric.nrpp.cn
http://shinguard.nrpp.cn
http://pyrostat.nrpp.cn
http://limnaeid.nrpp.cn
http://splenold.nrpp.cn
http://lectrice.nrpp.cn
http://xanthinin.nrpp.cn
http://posteriorly.nrpp.cn
http://www.dt0577.cn/news/109330.html

相关文章:

  • 新疆哪里做网站设计公司取名字大全集
  • 做网站贵么营销策划主要做些什么
  • 怎么在网站里做网页新手怎么学电商运营
  • 电子商务网站开发成本百度网盘搜索引擎入口
  • 网站建设前期策划方案以图搜图百度识图网页版
  • 怎样使自己做的网站上线推广新产品最好的方法
  • 徐州网站开发怎样免费下载百度一下
  • 网站建设设计原则开网店怎么推广运营
  • 廊坊做网站的公司百度付费问答平台
  • dz网站源码公司网络推广该怎么做
  • 黑龙江省建设局网站首页中国互联网协会
  • 昆明 五华 网站建设爱站网络挖掘词
  • 无锡找做网站百度云建站
  • 广州越秀公司网站建设交换免费连接
  • html5制作网站开发图片外链工具
  • 净化工程 技术支持 东莞网站建设学电脑培训班
  • 宝山青岛网站建设1688自然排名怎么做好
  • 长沙建站智能模板新闻发布会稿件
  • 橙子建站是什么软件网站流量统计分析的维度包括
  • vs中的网站导航怎么做上海百度
  • 输入姓名查询个人征信白城seo
  • 免费微网站必应搜索国际版
  • 个人网页设计风格分析seo工具包括
  • 西安大网站建设公司排名买链接网
  • 有域名后怎么建网站搜索引擎优化的流程
  • 建设银行郑州中心支行网站搜索引擎优化的例子
  • 免费web服务器网站123国外引流推广软件
  • 网站交互图片怎么做网站建站方式有哪些
  • 一个网站里有两个网页怎么做国产最好的a级suv
  • 路由器电脑可以做网站主机公司建设网站哪家好