我有一个收藏品
Vector<HashMap<String, String>>
实际上我使用它作为android中的列表视图的列表项。我使用了SortedMap
但是我得不到正确的结果。我认为这是因为HashMap的结构是
hashMap.add("Name","value_of_name");
hashMap.add("Counts","value_of_counts");
现在我将它添加到Vector。
我想通过hashMap的Name
键对vector的元素进行排序。
我知道Collection.sort
,我可以使用ArrayList和POJO类对此进行排序。但我不知道如何将其与adapter
ListView
一起使用
如何对元素进行排序?还有更好的解决方案(关于我的收集数据结构,可以很容易地与适配器一起使用)?
答案 0 :(得分:2)
您需要一个实现Comparator<HashMap<String,String> >
并将排序顺序的逻辑放在其compare
方法中。
答案 1 :(得分:1)
不确定我是否理解正确。这将在地图的一个键上对矢量进行排序。
Collections.sort(yourVector, new Comparator<HashMap<String,String>>() {
public int compare(HashMap<String,String> a, HashMap<String,String> b) {
return a.get(yourKey).compareTo(b.get(yourKey));
}
});
答案 2 :(得分:1)
您是否从未考虑过查看java.util包中的集合?
然后您会发现Treemap
已经为Comparable
项实现了平衡树排序,比如String is。
因此,要对您的商品进行排序,只需使用HashMap
重新展示您的TreeMap
,所有工作都将完成。
BTW这个载体在这里做了什么?他们是Java 1.1(换句话说,十五岁)
答案 3 :(得分:0)
使用TreeMap的最佳(最快)方式。如果您使用正确的Comperator为其提供,则将对TreeMap中的所有项进行排序。
重要的问题:为什么你有一个HashMaps矢量?
答案 4 :(得分:0)
如果要对数组中的地图进行排序,请使用SortedMap或TreeMap等ConcurrentSkipListMap实施。这将获取HashMaps的向量,并返回SortedMaps的ArrayList(非同步和更快的集合)。
public ArrayList<SortedMap<String, String>> sortMaps(Vector<HashMap<String, String> maps) {
ArrayList<TreeMap<String, String>> returnMaps = new ArrayList<TreeMap<String, String>>();
for(HashMap<String, String> theMap : maps) {
// TreeMap is a sorted map and this will use the default String.compareTo
TreeMap<String, String> newMap = new TreeMap<String, String>();
// put all the items from the HashMap into the TreeMap, which will autosort
newMap.putAll(theMap);
returnMaps.add(newMap);
}
return returnMaps;
}
要通过哈希映射的第一个键(最低键,按字母顺序排序)对Vector进行排序,请在返回行之前尝试以下操作:
// this sorts the vector by first keys
Collections.sort(returnMaps, new Comparator<SortedMap<String,String>>() {
public int compare(SortedMap<String,String> a, HashMap<String,String> b) {
return a.firstKey().compareTo(b.firstKey());
}
});
或者,如果您想按最后一个键排序(最高键,按字母顺序排列):
// this sorts the vector by first keys
Collections.sort(returnMaps, new Comparator<SortedMap<String,String>>() {
public int compare(SortedMap<String,String> a, HashMap<String,String> b) {
return a.lastKey().compareTo(b.lastKey());
}
});
返回所有键的一个有序地图(将踩踏任何重复项):
public SortedMap<String, String> singledSortedMap(Vector<HashMap<String, String> maps) {
// this will end up with all the values, sorted by natural string ordering
SortedMap<String, String> returnMap = new TreeMap<String, String>();
for(HashMap<String, String> theMap : maps) {
returnMap.putAll(theMap);
}
return returnMap;
}