【java】从Map中模糊匹配key值

如果我们想要从一个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));

}

结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值