java - 迭代 HashMap 的 ArrayList 很困难

标签 java android arraylist hashmap

我有一个全局定义的 ArrayList 作为 ArrayList<Map<String, String>> mContactList;

现在,在其中一种方法中,我定义一个 HashMap,如下所示:

Map<String, String> NamePhoneType = new HashMap<String, String>();    
NamePhoneType.put("Name", contactName); //contactName is returned from a query
NamePhoneType.put("Phone", phoneNumber); //phoneNumber is returned from a query
mContactList.add(NamePhoneType);

所以 mContactList 现在看起来像 [{Name=Abc, Phone=123}, {Name=def, Phone=456}...]

现在,当我尝试使用以下代码迭代 mContactList 时,我总是根据索引将键获取为 'Phone',将值获取为 '123''456'

public void onItemClick(AdapterView<?> av, View v, int index,long arg) {
    Map<String, String> map = (Map<String, String>) av.getItemAtPosition(index);
    Iterator<String> myVeryOwnIterator = map.keySet().iterator();
    while (myVeryOwnIterator.hasNext()) {
        String key = (String) myVeryOwnIterator.next();
        String value = (String) map.get(key);
        getNumber.setText(value);                                    
        }               
    }
});

我希望 Name 和所选索引的 Phone 位于 2 个单独的字符串中。我该怎么做?

最佳答案

我建议您创建一个名为 Contact 的类,而不是像您那样使用 map 。然后您的 ArrayList 将被声明为

ArrayList<Contact> mContactList;

Contact 类看起来像

public class Contact {
    private String name;
    private String phoneNumber;

    public Contact (String name, String phoneNumber) {
        this.name = name;
        this.phoneNumber = phoneNumber;
    }

    public String getName() {
        return name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }
}

每当您最终使用嵌套数据结构时,通常都表明您需要重新考虑您的设计,因为通常有更好的方法来实现。

<小时/>

但是,回答你的问题;请注意这段代码正在做什么。

Map<String, String> map = (Map<String, String>) av.getItemAtPosition(index);
Iterator<String> myVeryOwnIterator = map.keySet().iterator();
while (myVeryOwnIterator.hasNext()) {
    String key = (String) myVeryOwnIterator.next();
    String value = (String) map.get(key);
    getNumber.setText(value);                                    
}

您正在迭代一个映射,该映射(似乎)总是有两对:

"Name", nameValue
"Phone", phoneValue

无需遍历 Map 即可获取所需的值。您的代码应如下所示:

Map<String, String> map = (Map<String, String>) av.getItemAtPosition(index);
String phoneNumber = map.get("Phone");
String name = map.get("Name");

关于java - 迭代 HashMap 的 ArrayList 很困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11422165/

相关文章:

android - RecyclerView 的约束布局存在问题

java - 如何从Android中的服务器播放音频

java - 数组的数组列表,如何使最后一个数组的大小与列表中的其他数组有所不同

java - 在java中将ArrayList添加到另一个ArrayList

java - ArrayList并发访问

java - 正确处理 Ext-GWT 中的 OnMouseWheel 事件

java - 如何使用速度模板将选定的 href <a> 标签值发送回 java 方法

java - Spring RedisConnectionFactory 事务不返回到池的连接,然后在用尽时阻塞

java - 错误 : No resource found that matches the given name (at 'entries' with value '@array/pref_sync_frequency_titles' )

java - 我想捕获一个不带下划线的字母数字组