我需要帮助来定义要使用的方法。我有一个 SOAP 响应给我一个 xml 文件。我需要在屏幕上显示 3 个相关列表。当您在第一个列表中选择一个项目时,相应的选项将出现在第二个列表中等。我只对从 xml 流中提取数据后如何有效地组织数据感兴趣。这是一个 xml 片段:
<device>
<manufacturer>Acer</manufacturer>
<model>A1</model>
<platform>Android</platform>
</device>
<device>
<manufacturer>Acer</manufacturer>
<model>A1</model>
<platform>J2ME</platform>
</device>
<device>
<manufacturer>Acer</manufacturer>
<model>A2</model>
<platform>Android</platform>
</device>
<device>
<manufacturer>Samsung</manufacturer>
<model>E400</model>
<platform>Android</platform>
</device>
所以,我将有类似 manufacturer={"Acer", "Acer", "Acer","Samsung"}, model={"A1","A1", "A2", "E400"}, platform={"Android","J2ME","Android","Android"}。
有趣的部分来了:我需要处理数据,以便我可以用它来显示 3 个列表。选择 Android 后,Acer 和 Samsung 变为可用。如果选择Acer,则有型号A1和A2可选。所有列表都需要排序。目前我正在使用 Sax 将数据解析为对象 vector ,其中包含制造商、型号、平台字段。我能想到的就是类似 TreeMap 的结构。任何建议,将不胜感激。
最佳答案
我认为层次结构不是您在这里需要的。因为用户可能会选择第一个平台或制造商。如果他选择第一个 Android,你想显示 3 个设备。如果他选择第一个 Acer,他将看到 2 个设备。
所以,我的建议如下。
- 创建具有属性制造商、型号、平台的设备类。
- 创建一个包含所有这些设备的普通链表。
创建 2 个 map :manufaturerIndex 和 plarformIndex,它们看起来像:
Map<String, Collection<Device>> manufacturerIndex;
遍历列表一次并填充所有索引映射。
像这样:
for(Device d : devices) {
Collection<Device> selected = manufacturerIndex.get(d.getManufacturer());
if (selected == null) {
selected = new ArrayList<Device>();
manufactuerIndex.put(d.getManufacturer(), selected);
}
selected.add(d);
// the same for the second index
}
现在你可以使用数据结构了。
manufactuerIndex.get("Nokia")
-> 返回所有诺基亚设备。
注意这个数据结构是可扩展的。您可以随时添加任意数量的索引。
关于java数据结构模拟数据树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216873/