我有一个名为 fetchContactName()
的数组列表,它返回我联系人列表中的所有姓名 (31),一个名为 fetchContactNumbers()
的数组列表返回所有电话号码 (31) ) 与 fetchContactName()
关联,还有一个名为 newList
的数组列表,其中包含向我发送短信 (6) 的所有号码。
我试图通过在 fetchContactNumbers()
中查找相同的号码来更改 newList
中的电话号码。当匹配时,我会在 fetchContactNumbers()
中索引该位置,并使用该索引获取 fetchContactName()
中相同位置的名称。从那里,我将根据索引位置将 newList
中的数字替换为 fetchContactName()
中的名称。
这是我制作的一个按上述方式执行的示例:
上述示例的问题在于,当我将它应用到我的listview
时,列表中只有一个元素被更改为名称。更奇怪的是,newList.get(3)
是唯一更改为名称的。位置 0、1、2、4 和 5
不是 newList
。
根据其他人的建议,我如何使用 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());
}
}
最佳答案
我认为如果我更改您的代码并回答...会更好
import java.util.ArrayList;
import java.util.HashMap;
public class StringT {
public static void main(String[] args) {
// alpha would represent fetchContactNames()
ArrayList<String> alpha = new ArrayList<String>();
// bravo would represent fetchContactNumbers()
HashMap<String, String> bravo = new HashMap<String, String>();
// charlie would represent newList
ArrayList<String> charlie = new ArrayList<String>();
bravo.put("1", "One"); charlie.add("5");
bravo.put("2", "Two"); charlie.add("1");
bravo.put("3", "Three"); charlie.add("3");
bravo.put("4", "Four"); charlie.add("4");
bravo.put("5", "Five"); charlie.add("2");
// this will print charlie just as you see above
for(int i = 0; i < charlie.size(); i ++){
System.out.println(charlie.get(i));
}
System.out.println("---------------------");
// this will print charlie with the numbers replaced as names
for(int i = 0; i < charlie.size(); i++){
String value;
if((value = bravo.get(charlie.get(i))) != null){
charlie.set(i, value);
}
}
for(int i = 0; i < charlie.size(); i ++){
System.out.println(charlie.get(i));
}
}
}
关于java - 如何比较 Hashmap 中的 2 个数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973970/