gpt4 book ai didi

java - 如何迭代对象列表以从中创建新的 Map?

转载 作者:行者123 更新时间:2023-12-01 18:34:06 28 4
gpt4 key购买 nike

我正在尝试迭代对象列表,以便迭代后我可以创建 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);

新 map 应该是这样的 -

DC1 - hostA,hostB
DC2 - hostC,hostD
DC3 - hostE,hostF

这里DC1是新 map 的 key ,hostA,hostB是该映射的字符串值列表。对于其他人来说也是如此。

但不知何故,在我的持有者 map 中,我总是看到该数据中心的机器的最新值,而不是该数据中心的所有机器。

不知怎的,我犯了一个非常愚蠢的错误。

最佳答案

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

您将替换与 machine.getColo() 关联的整个列表,而不是添加新条目。

可能最简单的解决方法是

    LinkedList<String> dynMachine = holder.get(machine.getDatacenter());
if (dynMachine == null) {
dynMachine = new LinkedList<String>();
holder.put(machine.getDatacenter(), dynMachine);
}
dynMachine.add(machine.getDatacenter());

关于java - 如何迭代对象列表以从中创建新的 Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22796009/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com