-1
private Map<Group, List<Contact>> groupedContactList = 
    new HashMap<Group, List<Contact>>();

我正在尝试实现一种getGroup(int position)方法,但遇到了麻烦。

我试过(Group)groupedContactList.keySet().toArray()[position];了,但它不起作用。

编辑:该getGroup()方法必须被覆盖,因为我正在扩展一个适配器,所以很遗憾我无法更改方法签名。

4

2 回答 2

2

Map 对象很适合使用键而不是位置值来获取您要查找的内容。

映射对象将信息存储在键/值对中。在您的示例中,键是组,值是联系人列表。为了让这一切正常工作,您的关键对象必须实现 equals(Object object) 方法。

public class Group { 
    //lots of really great code that defines a Group
    public boolean equals(Object obj) {
        if( Object == null ) return false; 
        if( !(Object instanceof Group) ) return false; 
        if( this == obj ) return true; 

        Group compareMe = (Group)obj; 
        if( this.getId() != null && compareMe.getId() != null && this.getId().equals(compareMe.getId()) ) return true; 
        return false; 
    }
}

然后可以使用 map.get(Group key) 来获取您要查找的内容。

真正的问题是地图不是排序的集合。信息的存储方式没有保证的顺序,因此您不能真正保证每次根据位置值 1 获取的东西都是相同的。

于 2013-10-17T01:33:04.357 回答
0

如果您使用 LinkedHashMap,它保留了添加键/值对的顺序,我认为您的代码应该可以工作。试试看。

于 2013-10-17T02:33:51.673 回答