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

Difference between two hashmaps and overwrite value on match

我是 Java 的新手,我 运行 遇到了一些问题。目标是比较参数,例如-DmyCustomArg="my_value",我在 jvm 中用映射指定并用新值覆盖匹配的键。

所以我有两个哈希映射,一个是 System.getProperties(),另一个是带参数的映射。现在我想比较两者并替换匹配值。

我已经试过了

  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( ??? ))
        }
    }

但现在我不能再进一步了。我如何获得它匹配的值以便我可以替换它?我是否必须创建存储结果的第三张地图,还是有更简单的方法?

欢迎,

您可以使用这个 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));
            }
        }

如果您需要覆盖属性,在地图中使用相同的键值就足够了。地图将替换以前的值。

例如:

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"));