我有一个名为fetchContactName()
的arraylist,它返回我的联系人列表中的所有名称(31),一个名为fetchContactNumbers()
的arraylist,它返回与fetchContactName()
相关联的所有电话号码(31),以及一个名为newList
的arraylist,其中包含向我发送短信的所有数字(6)。
我试图通过查找newList
中的相同数字来更改fetchContactNumbers()
中的电话号码。当匹配时,我会在fetchContactNumbers()
中索引位置并使用该索引在fetchContactName()
中的同一位置获取名称。从那里开始,我会根据索引位置将newList
中的数字替换为fetchContactName()
中的名称。
这是我做的一个例子,如上所述:
上述示例的问题在于,当我将其应用于listview
时,列表中只有一个元素更改为名称。更奇怪的是,newList.get(3)
是唯一一个改名为名字的人。位置newList
不是0, 1, 2, 4 and 5
。
其他人建议,我如何使用HashMap
给出与上面给出的例子相同的预期结果?有人告诉我在fetchContactNumbers()
中使用fetchContactNames()
和Hashmap
,然后使用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());
}
}
答案 0 :(得分:1)
你的代码正在工作,你放在这里http://pastebin.com/pApHNkXa我在android中尝试过它的工作正常它输出为五,二,七,三。
答案 1 :(得分:0)
我认为如果我更改你的代码并回答它会更好......
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));
}
}
}