【发布时间】:2012-06-11 02:24:36
【问题描述】:
我有一个名为 fetchContactName() 的数组列表,它返回我的联系人列表中的所有姓名 (31),一个名为 fetchContactNumbers() 的数组列表返回与 fetchContactName() 关联的所有电话号码 (31),还有一个名为 newList 的数组列表其中包含所有向我发送短信的号码 (6)。
我试图通过在fetchContactNumbers() 中查找相同的号码来更改newList 中的电话号码。当有匹配时,我将索引fetchContactNumbers() 中的位置,并使用该索引在fetchContactName() 中的相同位置获取名称。从那里,我将根据索引位置将newList 中的数字替换为fetchContactName() 中的名称。
这是我制作的一个按上述方式执行的示例:
上面例子的问题是,当我将它应用到我的listview 时,列表中只有一个元素被更改为名称。更奇怪的是,newList.get(3) 是唯一一个改名的。不是newList 在位置0, 1, 2, 4 and 5。
根据其他人的建议,我如何使用HashMap 来提供与上面给出的示例相同的预期结果?我被告知在Hashmap 中使用fetchContactNumbers() 和fetchContactNames(),然后使用HashMap 与newList 进行比较,但我找不到任何来源来实现这一点。
更新:
这是我的 HashMap 的工作代码,但结果仍然与上面相同:
for (String str : fetchContactNames()) {
contactNameNew += str + " ";
}
for (String str2 : fetchContactNumbers()) {
contactNumberNew += str2 + " ";
}
//String to split
String temp[];
String temp2[];
String delimiter = " ";
temp = contactNameNew.split(delimiter);
temp2 = contactNumberNew.split(delimiter);
HashMap<String, String> contacts = new HashMap<String, String>();
contacts.put(contactNameNew, contactNumberNew);
for(int i = 0; i < fetchContactNames().size(); i++){
contacts.put(temp[i], temp2[i]);
}
Iterator<Entry<String, String>> iterator = contacts.entrySet().iterator();
while(iterator.hasNext()){
Entry<String, String> entry = iterator.next();
int position = getPosition(newlist, entry.getValue());
if (newlist.contains(entry.getValue())) {
newlist.set(position, entry.getKey());
}
}
【问题讨论】:
标签: java android arraylist hashmap