jvm 两个哈希Map之间的差异和匹配时的覆盖值

vcirk6k6  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(145)

我对Java相对较新,遇到了一些问题。目标是将我在JVM中指定的参数,如-DmyCustomArg="my_value"与Map进行比较,并用新值覆盖匹配的键。
所以我有两个散列表,一个是System.getProperties(),另一个是带参数的Map,现在我想比较这两个Map,并替换匹配的值。
我已经试过了

Map properties = System.getProperties();
  Map<String, String> parameter = new HashMap<>();

  parameter.put("1", "value one");
  parameter.put("2", "value two");
  parameter.put("myCustomArg", "value three");

    for (int i = 0; i < parameter.keySet().toArray().length; i++) {
        if (properties.containsKey(parameter.keySet().toArray()[i])) {
            parameter.replace(properties.get( ??? ))
        }
    }

但是现在我不能再进一步了。我如何得到匹配的值,以便替换它?我必须创建第三个Map来存储结果吗?或者有更简单的方法吗?

ijxebb2r

ijxebb2r1#

欢迎你,
您可以使用以下forEach循环:

Properties properties = System.getProperties();
        Map<String, String> map = new HashMap<>();

        map.put("1", "value one");
        map.put("2", "value two");
        map.put("myCustomArg", "value three");

        map.forEach((key, value)->{
            if(properties.containsKey(key)){
                System.setProperty(key, value);
            }
        });

或者如果你不想使用lambda来循环条目集,你可以用下面的代码来替换map.forEach():

for (Map.Entry<String, String> entry : map.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            if(properties.containsKey(key)){
                System.setProperty(key, value);
            }
        }

或者如果您只想循环按键:

for (String key : map.keySet()) {
            if(properties.containsKey(key)){
                System.setProperty(key, map.get(key));
            }
        }
rekjcdws

rekjcdws2#

如果需要覆盖属性就足够了,在map中使用相同的键值. Map将替换以前的值。
例如:

Map systemProperties = System.getProperties();

System.out.println("java.runtime.version before: " + systemProperties.get("java.runtime.version"));

systemProperties.put("java.runtime.version", "17.0.0");

// Print the new value
System.out.println("java.runtime.version after: " + systemProperties.get("java.runtime.version"));

相关问题