【发布时间】:2014-04-01 20:15:52
【问题描述】:
我正在尝试迭代一个对象列表,以便在迭代后我可以从中创建一个Map of String and List<String>。
下面是我的 Machine 类,它有 dataCenter、hostName 和 hostId。
public class Machine {
private String dataCenter;
private String hostName;
private String hostId;
// getters here
public Machine(String dataCenter, String hostName, String hostId) {
// some code here
}
}
如果您看到我下面的代码,我有一个 machines 列表,其中有 6 个机器对象。然后迭代 machines 对象并从中制作一个新的 Map。
Map<String, List<String>> holder = new LinkedHashMap<String, List<String>>();
List<Machine> machines = new ArrayList<Machine>();
Machine machine1 = new Machine("DC1", "machineA", "hostA");
Machine machine2 = new Machine("DC1", "machineB", "hostB");
Machine machine3 = new Machine("DC2", "machineC", "hostC");
Machine machine4 = new Machine("DC2", "machineD", "hostD");
Machine machine5 = new Machine("DC3", "machineE", "hostE");
Machine machine6 = new Machine("DC3", "machineF", "hostF");
machines.add(machine1);
machines.add(machine2);
machines.add(machine3);
machines.add(machine4);
machines.add(machine5);
machines.add(machine6);
// some other code here
// iterate machines object
for (Machine machine : machines) {
LinkedList<String> ppMachine = new LinkedList<String>();
// below code doesn't work as it shows only last machine for that Datacenter
ppMachine.add(machine.getHostId());
holder.put(machine.getDatacenter(), ppMachine);
}
System.out.println(holder);
新地图应该是这样的——
DC1 - hostA,hostB
DC2 - hostC,hostD
DC3 - hostE,hostF
这里DC1 是新映射的键,hostA,hostB 是该映射的字符串值列表。其他人也一样。
但不知何故,在我的持有者地图中,我总是看到该数据中心的机器的最新价值,而不是该数据中心的所有机器。
不知何故,我犯了一个非常愚蠢的错误。
【问题讨论】: