对包含对象数组的地图进行排序

时间:2013-03-19 14:07:16

标签: java

如果我制作这样的地图:

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那么简单 但我想知道是否有更好/更清洁的方式这样做?我不是都熟悉地图......任何帮助都会受到赞赏..

3 个答案:

答案 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实现。他们可能有一个已经支持排序/排序。