【发布时间】:2019-08-08 13:31:54
【问题描述】:
我的地图具有与用户关联的属性,例如
user : {name=tom, address=usa, id=111, contact=7869989556,
designation=engineer}
我将有一个规则列表,这些规则将根据给定的键和值列表阻止垃圾用户。例如,不允许名称以 test 开头的工程师。 所以我的标准是如果 name = ^test.*$ 和 designation=engineer 阻止添加到数据库。 上述规则将来也可以扩展为其他键以及值列表。例如规则可以扩展为力学等。
在 java 中实现这一目标的最优化方法是什么?
编辑:
doNotAddUserCriteria = HashMap<String, List<String>>
以下是7777或99999开头的工程师,屏蔽他们
doNotAddUserCriteria.put("name", ['^9999.*$','^7777.*$'])
doNotAddUserCriteria.put("designation", ['enginner'])
if(isValidUser(userData)){
Process if valid else drop
}
public boolean isValidUser(Map<String,Object> userData) {
Logic should be applied here to check whether user is valid based on criteria
}
此外,我应该能够根据配置应用选定的规则。像机械师但不是工程师,名称以 7777 等开头。 如果我添加如下内容,它将阻止工程师和机械师,但我不想要
doNotAddUserCriteria.put("name", ['^9999.*$','^7777.*$'])
doNotAddUserCriteria.put("designation", ['enginner','mechanic'])
【问题讨论】:
-
一个带过滤器的流,也许吧?用 Java 发布你的数据结构,我的意思是 我有一个
Map<String, User>而不是 我有一个地图...User看起来如何?您可以使用User的方法进行过滤和许多其他选项。 -
当你谈到优化时,你想优化什么?计算还是记忆?因为一种可能的方法是创建自己的 Map 复制数据以实现在内存中受到惩罚的最佳时间
-
同意 deHaar:使用流过滤器可能是最快的方法。
-
@deHaar 我已经用代码和更多细节编辑了这个问题。
标签: java collections hashmap