如何将所有Java系统属性转换为HashMap <string,string>?</string,string>

时间:2013-06-26 22:27:27

标签: java hashmap system-properties

nice article向我们展示了如何将所有当前系统属性打印到STDOUT,但我需要将System.getProperties()中的所有内容转换为HashMap<String,String>

因此,如果有一个名为“baconator”的系统属性,值为“yes!”,我使用System.setProperty("baconator, "yes!")设置,那么我希望HashMap的密钥为{{ 1}}和baconator等的相应值。所有系统属性的相同构思。

我试过了:

yes!

然后得到一个错误:

  

类型不匹配:无法从元素类型Object转换为String

然后我尝试了:

Properties systemProperties = System.getProperties();
for(String propertyName : systemProperties.keySet())
    ;

我收到此错误:

  

只能遍历数组或java.lang.Iterable

的实例

有什么想法吗?

5 个答案:

答案 0 :(得分:8)

我使用Map.Entry

进行了示例测试
Properties systemProperties = System.getProperties();
for(Entry<Object, Object> x : systemProperties.entrySet()) {
    System.out.println(x.getKey() + " " + x.getValue());
}

对于您的情况,您可以使用它将其存储在Map<String, String>

Map<String, String> mapProperties = new HashMap<String, String>();
Properties systemProperties = System.getProperties();
for(Entry<Object, Object> x : systemProperties.entrySet()) {
    mapProperties.put((String)x.getKey(), (String)x.getValue());
}

for(Entry<String, String> x : mapProperties.entrySet()) {
    System.out.println(x.getKey() + " " + x.getValue());
}

答案 1 :(得分:2)

循环Set<String>方法返回的Iterableput)。处理每个属性名称时,使用stringPropertyNames()获取属性值。然后,您将HashMap所有属性值所需的信息添加到{{1}}。

答案 2 :(得分:0)

这确实有效

Properties properties= System.getProperties();
for (Object key : properties.keySet()) {
    Object value= properties.get(key);

    String stringKey= (String)key;
    String stringValue= (String)value;

    //just put it in a map: map.put(stringKey, stringValue);
    System.out.println(stringKey + " " + stringValue);
}

答案 3 :(得分:0)

您可以使用entrySet()中的Properties方法从Entry Properties获取Iterable类型,或者您可以使用stringPropertyNames()来自Properties类的方法,以获取此属性列表中的Set个键。使用getProperty方法获取属性值。

答案 4 :(得分:0)

从Java 8开始,你可以输入这个-rather long-one-liner:

Map<String, String> map = System.getProperties().entrySet().stream()
  .collect(Collectors.toMap(e -> (String) e.getKey(), e -> (String) e.getValue()));