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

Java 对包含对象数组的地图进行排序,java,Java,如果我制作一张这样的地图: Map<Object, ArrayList<Object>> multiMap = new HashMap<Object, ArrayList<Object>>(); Map multiMap=newhashmap(); 有没有办法对ArrayList中的值进行排序? 我正在考虑在多重映射中循环: for (Entry<Object, ArrayList<Object>> entry : mu

如果我制作一张这样的地图:

Map<Object, ArrayList<Object>> multiMap = new HashMap<Object, ArrayList<Object>>();
Map multiMap=newhashmap();
有没有办法对
ArrayList中的值进行排序?

我正在考虑在多重映射中循环:

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
    }
for(条目:multiMap.entrySet()){
对于(int i=0;i
所以我们有 对象-->arrayList(包含2个元素) 对象-->arrayList(包含2个元素) 对象-->arrayList(包含2个元素) 对象-->arrayList(包含2个元素)

我想获取上面所有ArrayList中的所有元素并按它们进行排序。它不需要停留在multimap中。我只是想看看是否有更好的方法来实现它

编辑: 这里的要点是将每个arrayList中的所有数组元素与每个其他arrayList中的所有其他数组元素进行排序……因此,这并不像调用sort那么简单
但我想知道是否有更好/更干净的方法来实现这一点?我对地图不太熟悉…任何帮助都将不胜感激。

事实上,你不应该在意ArrayList是地图中的值,这无关紧要。你可以按照你对任何此类列表的排序方式对其进行排序。这里的问题是你将我必须实现某种比较器,将对象强制转换为所需的类型。一般来说,我个人会使ArrayList的类型比Object更具体,以使排序更容易。

实际上,你不应该在意ArrayList是映射中的值,这无关紧要。你可以按这种方式排序您可以对任何此类列表进行排序。这里的问题是,您必须实现某种比较器,将对象强制转换为所需的类型。一般来说,我个人会将ArrayList的类型设置为比Object更具体的类型,以使排序更容易。

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

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

根据您的编辑,您似乎希望获取地图中的所有对象并对其排序。没有一种直接的方法可以将地图中的值排序到一起因此,要对所有项目进行排序,最简单的方法是将它们合并到一个列表和集合中

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);
}
public ArrayList sortAllValues(){
ArrayList allEntries=新的ArrayList();
for(条目:multiMap.entrySet())
allEntries.addAll(entry.getValue());
}
返回集合。排序(allEntries);
}

如果对象没有可比性,则仍然需要实现可比性。这是一个很好的指南,介绍了如何实现

基于您的编辑,您似乎希望获取地图中的所有对象并对它们进行排序。没有一种直接的方法可以将映射中的值一起排序,因此要对所有项进行排序,最简单的方法是将它们合并到一个列表和集合中。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);
}
public ArrayList sortAllValues(){
ArrayList allEntries=新的ArrayList();
for(条目:multiMap.entrySet())
allEntries.addAll(entry.getValue());
}
返回集合。排序(allEntries);
}

如果对象没有可比性,则仍然需要实现可比性。这是如何实现集合的一个很好的指南。sort()
-试试这个。@R.J但我想将所有ArrayList相互排序。。。就像所有数组中的每个值与所有其他数组列表中的每个值一样。。。所以这并不是那么简单。@BlueMonster:你到底想要什么还不是很清楚。您能否提供一些示例数据以及如何对其进行排序?(同时:此数据结构提示可能的错误)。那么您想对地图中的所有数组重新排序吗?你能再清楚一点吗。可能会发布更多的代码或具有预期输出的示例
Collections.sort()
-请尝试一下。@R.J但我想将所有ArrayList相互排序。。。就像所有数组中的每个值与所有其他数组列表中的每个值一样。。。所以这并不是那么简单。@BlueMonster:你到底想要什么还不是很清楚。您能否提供一些示例数据以及如何对其进行排序?(同时:此数据结构提示可能的错误)。那么您想对地图中的所有数组重新排序吗?你能再清楚一点吗。可能会发布更多的代码或具有预期输出的示例