我在我的Activity中使用ArrayMap来存储我的响应。
ArrayMap<String, PublicSpotData> publicSpotData
ArrayMap将存储索引和键值对。现在我在排序ArrayMap时遇到了问题。我想根据publicSpotData.getAt() (int)
对ArrayMap进行排序。
我已经做到了。
List<Map.Entry<String, PublicSpotData>> entries = new ArrayList<>();
for (Map.Entry<String, PublicSpotData> entry : publicSpotData.entrySet()) {
entries.add(entry);
}
Collections.sort(entries, new Comparator<Map.Entry<String, PublicSpotData>>() {
@Override
public int compare(Map.Entry<String, PublicSpotData> o1, Map.Entry<String, PublicSpotData> o2) {
return o2.getValue().getAt().compareTo(o1.getValue().getAt());
}
});
for (Map.Entry<String, PublicSpotData> entry : entries)
publicSpotData.put(entry.getKey(), entry.getValue());`
但这并没有解决我的问题。 任何帮助,将不胜感激。
答案 0 :(得分:1)
您可以使用收藏品#sort种种 method
Collections.sort(new ArrayList<>(c), aComparator);
c只是ArrayMap中的key set 和aComparator是比较器的自定义实现,用于对地图中的元素进行排序
答案 1 :(得分:1)
您可以通过提供 Comparator 对任何 Java集合进行排序。
换句话说:你必须创建一个知道如何比较两个 PublicSpotData 对象的类;然后将其与Collections.sort()一起使用。
含义:只要你的“传入”对象实现了一个Java集合接口(并且Android ArrayMap是一个Map,它是一个集合);您可以使用java库的默认方式对其进行排序。
但是,问题更复杂:您只能排序列表。您的输入数据......表示为Map。所以,让我们一步一步走:
List<PublicSpotData> dataObjects = ... coming from somewhere
Collections.sort(dataObjects, new Comparator<PublicSpotData>() { ...
here you put the comparator for that thing);
现在您有一个按该条件排序的列表。
从这个意义上说:真正的问题是您的模型不支持您的需求。 Map的本质是提供映射功能。 你需要:
答案 2 :(得分:0)
首先,ArrayMap隐式实现了键的排序。
基线:您需要迭代arrayMap以通过索引获取Key。然后通过该键调用值。
这是一个例子。我列出了未排序输入的排序输出。然后我反过来对keySet进行排序。
ArrayMap<String, String> arrayMap = new ArrayMap<>();
arrayMap.put("AAA7", "BBB2");
arrayMap.put("AAA8", "BBB1");
arrayMap.put("AAA9", "BBB");
arrayMap.put("AAA9", "BBB");// will override previous call
String res = "";
for (int i = 0; i < arrayMap.size(); i++) {
String key = arrayMap.keyAt(i);
res += arrayMap.get(key) + ", ";
}
Log.d(TAG, "normal output: " + res);
// sorting array based on keys
List<String> list = new ArrayList<>(arrayMap.keySet());
java.util.Collections.reverse(list);//or you implement your own sort
String res2 = "";
for (String key : list) {
res2 += arrayMap.get(key) + ", ";
}
Log.d(TAG, "output of sorted collection in reverse based on keys: " + res2);
为了提高效率,如果您不需要像Iteration这样的标准Java API,则可以使用SimpleArrayMap
。