如果我们想要从一个map集合中,模糊筛选出我们想要的key的集合应该如何处理呢?下面一个小例子解决此问题,但是性能上有待提高:
核心代码:
/**
* 从map中查询想要的map项,根据key
*/
public static Map<String, Object> parseMapForFilter(Map<String, Object> map,String filters) {
if (map == null) {
return null;
} else {
map = map.entrySet().stream()
.filter((e) -> checkKey(e.getKey(),filters))
.collect(Collectors.toMap(
(e) -> (String) e.getKey(),
(e) -> e.getValue()
));
}
return map;
}
/**
* 通过indexof匹配想要查询的字符
*/
private static boolean checkKey(String key,String filters) {
if (key.indexOf(filters)>-1){
return true;
}else {
return false;
}
}
此代码通过entryset进行遍历,找出其中可以匹配的项目,然后再重新collect成我们想要的map,示例:
public static void main(String[] args){
Map<String,Object> params = new HashMap<>(16);
params.put("a-1","1");
params.put("a-2","2");
params.put("a-3","3");
params.put("b-1","1");
params.put("b-2","2");
params.put("b-3","3");
params.put("c-1","1");
params.put("c-2","2");
params.put("c-3","3");
Map<String, Object> a = parseMapForFilter(params, "a");
System.out.println(JSON.toJSONString(a));
}
结果: