java - 如何比较 Hashmap 中的 2 个数组列表?

标签 java android arraylist hashmap

我有一个名为 fetchContactName() 的数组列表,它返回我联系人列表中的所有姓名 (31),一个名为 fetchContactNumbers() 的数组列表返回所有电话号码 (31) ) 与 fetchContactName() 关联,还有一个名为 newList 的数组列表,其中包含向我发送短信 (6) 的所有号码。

我试图通过在 fetchContactNumbers() 中查找相同的号码来更改 newList 中的电话号码。当匹配时,我会在 fetchContactNumbers() 中索引该位置,并使用该索引获取 fetchContactName() 中相同位置的名称。从那里,我将根据索引位置将 newList 中的数字替换为 fetchContactName() 中的名称。

这是我制作的一个按上述方式执行的示例:

http://pastebin.com/pApHNkXa

上述示例的问题在于,当我将它应用到我的listview 时,列表中只有一个元素被更改为名称。更奇怪的是,newList.get(3) 是唯一更改为名称的。位置 0、1、2、4 和 5 不是 newList

根据其他人的建议,我如何使用 HashMap 给出与上面给出的示例相同的预期结果?我被告知在 Hashmap 中使用 fetchContactNumbers()fetchContactNames() 然后使用 HashMapnewList,但我找不到实现此目的的任何来源。

更新:

这是我的 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/

相关文章:

java.util.MissingResourceException : Can't find bundle for base name com. sun.org.apache.xerces.internal.impl.msg.SAXMessages,区域设置 en_US

java - 安卓 : Sting returning with null pointer exception

android - 通过 android 在 youtube 上直播时处于非 Activity 状态

java - 如何将对象数组列表转换为 HashMap ,其中键和值是对象属性

java - 多线程后无法获得正确的执行时间

java - Spring登录表单从https切换为http

java - Thymeleaf请求参数空值问题

java - Android 应用程序部署在 Eclipse 上创建重复项

java - 只要 ArrayList 中有元素,如何使用线程执行功能?

java - Minecraft 从列表中获取对象并进行操作