【问题标题】:How do I compare 2 arraylists in a Hashmap?如何比较 Hashmap 中的 2 个数组列表?
【发布时间】:2012-06-11 02:24:36
【问题描述】:

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

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

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

http://pastebin.com/pApHNkXa

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

根据其他人的建议,我如何使用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());
        }
    }

【问题讨论】:

    标签: java android arraylist hashmap


    【解决方案1】:

    我认为如果我更改您的代码并回答会更好......

    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));
        }
    }
    }
    

    【讨论】:

    • 我没有看到如何在我的代码中实现这一点。我有 2 个用于 hashmap 的 arraylist,我被告知我应该将它们转换为字符串,然后将它与我的 newList ArrayList 进行比较
    • 我已经修改了您的代码并替换了它..另外,我选择数字作为“键”,以便您在根据数字搜索时快速访问。如果您想通过一个人的姓名搜索并获取他的联系电话,那么姓名是一个更好的“关键”。希望对您有所帮助!
    • 另外,如果相关的话,您能否详细说明“listView”在您的帖子中的含义...
    • 您的“if”语句不正确,如果您没有使用过列表视图,那么将很难理解问题所在。我遇到的问题是,只有六分之一的名称更改。似乎代码只是通过自身检查一件事,然后停止。
    • hmm ..据我了解您的问题,我认为“如果”是正确的..也会产生与粘贴代码相同的输出..无论如何,listView 的问题可能在于它没有更新..[链接]stackoverflow.com/questions/2250770/… 可能会有所帮助,因为我主要使用 iOS 列表,而问题通常在于刷新..
    【解决方案2】:

    你的代码正在工作,你放在这里 http://pastebin.com/pApHNkXa 我在 android 中尝试过,它工作正常,输出为五、二、七、三。

    【讨论】:

    • 由于某种原因,它在我的列表视图中不起作用。我正在创建一个模仿 SMS 收件箱的应用程序。现在,它正在我的手机上显示联系人的电话号码,但我正在尝试用实际的联系人姓名替换它们。我不知道为什么,但它对我来说无法正常工作并且没有错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多