如果我制作这样的地图:
Map<Object, ArrayList<Object>> multiMap = new HashMap<Object, ArrayList<Object>>();
我有办法对ArrayList<Object>?
我在考虑只是循环遍历多图:
for (Entry<Object, ArrayList<Object>> entry : multiMap.entrySet()) {
for (int i = 0; i < entry.size(); i++) {
//retrieve all array items and place in new array to sort
}
所以我们有 对象---&gt; arrayList(包含2个元素) 对象---&gt; arrayList(包含2个元素) 对象---&gt; arrayList(包含2个元素) 对象---&gt; arrayList(包含2个元素)
我想获取上面所有数组列表中的所有元素并按这些元素排序。它不需要留在multimap中..我只是想看看是否有更好的方法来做它..
修改 这里的要点是将每个arrayList中的所有数组元素与每个其他arrayList中的所有其他数组元素进行排序....所以它不像调用sort那么简单 但我想知道是否有更好/更清洁的方式这样做?我不是都熟悉地图......任何帮助都会受到赞赏..
答案 0 :(得分:1)
根据您的编辑,您似乎想要获取地图中的所有对象并对其进行排序。没有直接的方法来对地图中的值进行排序,以便对所有项进行排序,最简单的方法是将它们合并到一个列表中,将Collections.sort()整合到整个项中。
public ArrayList<Object> sortAllValues() {
ArrayList<Object> allEntries = new ArrayList<Object>();
for (Entry<Object, ArrayList<Object>> entry : multiMap.entrySet())
allEntries.addAll(entry.getValue());
}
return Collections.sort(allEntries);
}
如果没有它,你仍然需要对你的对象实现Comparable。这是有关如何实施Comparable
的良好指南答案 1 :(得分:0)
实际上你不应该关心ArrayList是Map中的值,这无关紧要。您可以按照排序任何此类列表的方式对此ArrayList<Object>
进行排序。这里的问题是你必须实现某种将对象强制转换为所需类型的Comparator。一般来说,我个人会创建比Object更具体类型的ArrayList,以便更容易排序。
答案 2 :(得分:0)
查看Apache Commons和Google Collections的MultiMap实现。他们可能有一个已经支持排序/排序。