需求:
在map里面,存在数据如下:
map.put("AAA.*bbbb.text", "one filename")
map.put("BBB.*dddd.text", "one filename")
map.put("dddd.*eeee.text", "one filename")
map.put("dddd.*llllll.text", "one filename")
现在存在一个字符串比如:AAA202039303920bbbb.text, 要求能根据存入的字符串按正在表达式匹配拿到map.put("AAA.*bbbb.text", "one filename")这个对象。
代码实现:
public static Map<String, JSONObject> parseMapForFilter(Map<String, JSONObject> map, String filename) {
if (map == null) {
return null;
} else {
map = map.entrySet().stream()
.filter((e) -> checkKey(filename, e.getKey()))
.collect(Collectors.toMap(
(e) -> (String) e.getKey(),
(e) -> e.getValue()
));
}
return map;
}
/**
* check contain
*/
public static boolean checkKey(String key,String filters) {
if(StringUtils.isNotBlank(key)){
key = key.toLowerCase();
}
if(StringUtils.isNotBlank(filters)){
filters = filters.toLowerCase();
}
return key.matches(filters);
}
说明:
Map<String, JSONObject> map === key为正则表达式的map对象。 filename =====传入的字符串。