1

如果我制作这样的地图:

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
    }

所以我们有对象--->arrayList(包含2个元素)对象--->arrayList(包含2个元素)对象--->arrayList(包含2个元素)对象--->arrayList(包含2个元素)

我想获取上面所有 arrayLists 中的所有元素并按这些元素排序。它不需要留在多地图中..我只是想看看是否有更好的方法来做到这一点..

编辑: 这里的重点是将每个arrayList中的所有数组元素与每个其他arrayList中的所有其他数组元素进行排序......所以它不像调用排序那么简单,但我想知道是否有更好/更清洁的这样做的方式?我对地图不是很熟悉...任何帮助将不胜感激..

4

3 回答 3

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);
}

如果没有它,您仍然需要实现与您的 Object 的 Comparable。这是关于如何实现Comparable的一个很好的指南

于 2013-03-19T14:27:14.897 回答
0

实际上,您不应该关心 ArrayList 是 Map 中的值,这无关紧要。您将按照ArrayList<Object>对任何此类列表进行排序的方式对其进行排序。这里的问题是您必须实现某种将 Object 转换为所需类型的 Comparator。一般来说,我个人会制作比 Object 更具体类型的 ArrayList 以使排序更容易。

于 2013-03-19T14:11:28.573 回答
0

查看 Apache Commons 和 Google Collections 的 MultiMap 实现。他们可能有一个已经支持排序/排序的。

于 2013-03-19T14:13:16.100 回答