Java Map util方法深入检查containsKey?

时间:2018-06-01 18:26:03

标签: java dictionary hashmap iteration helper

有人知道包含类似<?php return array( 'URL' => 'https://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])), 'DOMAIN' => $_SERVER['HTTP_HOST'], 'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/', 'DEBUG' => true, 'EMAIL_USED_MAILER' => 'phpmailer', 'SEND_MAIL_TO' => 'myreal@email.com', 'SEND_MAIL_FROM' => '', 'NEW_VAR' => 'foo' ); 方法的Util库吗?我必须检查地图及其嵌套的密钥条目。我当然可以编写自己的逻辑,但我喜欢使用Utils来保持我的代码更清洁,并保存一些单元测试。

地图结构为Util.deepContains(),其中Map<String, Map<String, Object>>可以是另一个Object,依此类推。

1 个答案:

答案 0 :(得分:1)

,我不知道库中存在任何现有功能。但是,如果存在,是否值得导入整个库,因为只有一个用例?随意创建自己的功能。请考虑以下示例地图结构:

{
    map2={
        map3={
            4=4, 
            5=5
        }
    }, 
    map4={
        6=6, 
        7=7
    }
}

无论嵌套了多少Map<String, Object>,以下递归函数都会迭代所有值,直到找到正确的值。在比较期间,由于正确的比较,您必须从Object投射到T

static <T> boolean deepContains(Map<?, ?> map, T item) {
    for (Entry<?, ?> entry: map.entrySet()) {
        final Object value = entry.getValue();
        boolean returned = false;
        if (value instanceof Map<?, ?>) {
            returned = deepContains((Map<?, ?>) value, item);
        } else {
            returned = item.getClass().cast(value).equals(item);
        }
        if (returned) {return true;}
    }
    return false;
}

用法:

boolean result = deepContains(map, "4"); // returns true
boolean result = deepContains(map, "7"); // returns true
boolean result = deepContains(map, "8"); // returns false