Java Properties集合的6种遍历处理方式:
采用集合处理方式的,调用Properties类的 xxSet()方法,调用Properties类的其它方法则是返回枚举数据结构Enumeration。
下面以列出计算机电脑配置的属性为例,给出各种方法,程序中有必要的说明:
import java.util.*;
import java.util.Map.Entry;
public class Example11 {
public static void main(String[] args) {
// 创建属性集合对象
Properties props = new Properties();
// 添加元素
props.setProperty("CPU", "Intel 酷睿i5 8400T");
props.setProperty("内存", "8GB DDR4");
props.setProperty("硬盘", "128GB+1TB");
props.setProperty("显卡", "NVIDIA GeForce MX130 2GB");
// 打印属性列表的各种方法
// 下面方法1和方法2不是遍历的处理方式,只能用于列表。其余的方法遍历方式,可适应于一般性的处理需求。
// 方法1: 直接使用toString()
System.out.println("------------------------------");
System.out.println(props.toString());
// 方法2: 使用输出流的list
System.out.println("------------------------------");
props.list(System.out);
// 方法3:forEach + lambda表达式
System.out.println("------------------------------");
props.forEach((k, v) -> System.out.println(k + ": " + v) );
// 方法4:调用stringPropertyNames() 得到Set<String>
// (当键和值都为String时才可以调用次方法)
System.out.println("------------------------------");
Set<String> set = props.stringPropertyNames();
for (String key : set) {
String value = props.getProperty(key);
System.out.println(key + ": " + value);
}
// 方法5:调用propertyNames()
System.out.println("------------------------------");
Enumeration<?> enu = props.propertyNames();
while (enu.hasMoreElements()) {
String key = (String)enu.nextElement();
String value = props.getProperty(key);
System.out.println(key + ": " + value);
}
// 方法6:调用entrySet()
System.out.println("------------------------------");
Set<Entry<Object, Object>> set2 = props.entrySet();
for (Entry<Object, Object> propi : set2) {
String key = (String)propi.getKey();
String value = (String)propi.getValue();
System.out.println(key + ": " + value);
}
// 方法7:调用keySet()
System.out.println("------------------------------");
Set<Object> set3 = props.keySet();
for (Object propi : set3) {
String key = (String)propi;
String value = (String)props.get(key);
System.out.println(key + ": " + value);
}
// 方法8:调用keys() 得到Enumeration<Object>
System.out.println("------------------------------");
Enumeration<Object> enu3 = props.keys();
while (enu3.hasMoreElements()) {
Object key = enu3.nextElement();
String value = (String)props.get(key);
System.out.println(key + ": " + value);
}
/*
// 方法9:调用elements()会抛出异常,其实这类似调用entrySet,见上面方法6。
System.out.println("------------------------------");
Enumeration<Object> enu2 = props.elements();
while (enu2.hasMoreElements()) {
// 下面这条语句试图把一个Object强制转换为Map.Entry<Object, Object>时抛出异常
Map.Entry<Object, Object> entry = (Map.Entry<Object, Object>)enu2.nextElement();
Object key = entry.getKey();
String value = (String)entry.getValue();
//String value = (String)entry.get();
System.out.println(key + ": " + value);
}
*/
}
}
/*
运行结果:
------------------------------
{硬盘=128GB+1TB, 显卡=NVIDIA GeForce MX130 2GB, CPU=Intel 酷睿i5 8400T, 内存=8GB DDR4}
------------------------------
-- listing properties --
硬盘=128GB+1TB
CPU=Intel 酷睿i5 8400T
显卡=NVIDIA GeForce MX130 2GB
内存=8GB DDR4
------------------------------
内存: 8GB DDR4
显卡: NVIDIA GeForce MX130 2GB
CPU: Intel 酷睿i5 8400T
硬盘: 128GB+1TB
------------------------------
硬盘: 128GB+1TB
CPU: Intel 酷睿i5 8400T
显卡: NVIDIA GeForce MX130 2GB
内存: 8GB DDR4
------------------------------
硬盘: 128GB+1TB
CPU: Intel 酷睿i5 8400T
显卡: NVIDIA GeForce MX130 2GB
内存: 8GB DDR4
------------------------------
硬盘: 128GB+1TB
显卡: NVIDIA GeForce MX130 2GB
CPU: Intel 酷睿i5 8400T
内存: 8GB DDR4
------------------------------
硬盘: 128GB+1TB
显卡: NVIDIA GeForce MX130 2GB
CPU: Intel 酷睿i5 8400T
内存: 8GB DDR4
------------------------------
硬盘: 128GB+1TB
显卡: NVIDIA GeForce MX130 2GB
CPU: Intel 酷睿i5 8400T
内存: 8GB DDR4
*/