此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
的实例
有什么想法吗?
答案 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>
方法返回的Iterable
(put
)。处理每个属性名称时,使用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()));