0

我有这张地图:

Map<Integer,List<EventiPerGiorno>> mapEventi=new HashMap<Integer,List<EventiPerGiorno>>();

其中EventiPerGiorno是一个Comparable对象。如何从地图中获取排序列表?

我试过了

Collection<List<EventiPerGiorno>> collection=mapEventi.values()
Comparable.sort(collection);

但是 Comparable.sort() 不喜欢该列表具有可比性。有 ComparableList 吗?

编辑

这是比较方法...

public class EventiPerGiorno implements Comparable<EventiPerGiorno>{


    @Override
    public int compareTo(EventiPerGiorno o) {
        return this.getPrimoSpettacolo().compareTo(o.getPrimoSpettacolo());
    }

}
4

4 回答 4

1

JavaCollections没有与它们相关的任何顺序。你可以把它Collection变成List第一个然后排序。

Collection<List<EventiPerGiorno>> collection = mapEventi.values()
YourComparableList<List<EventiPerGiorno>> list = new YourComparableList(collection);
Collections.sort(list);

为此,您将需要创建某种List工具Comparable。请参阅如何在这种情况下正确实现 List 的 Comparable?例如。

请注意,这是对 type 的对象进行排序List<EventiPerGiorno>,而不是对type 的对象进行排序EventiPerGiorno。如果您有兴趣对后者进行排序,则可能需要以下内容:

ArrayList<EventiPerGiorno> bigList = new ArrayList<EventiPerGiorno>();
for (List<EventiPerGiorno> list : mapEventi.values()) {
    bigList.addAll(list);
}
Collections.sort(bigList);
于 2013-11-06T14:13:37.057 回答
1

您正在尝试对列表列表进行排序。List 没有实现 Comparable。您必须创建自己的 Comparator 实例。

    Map<String, List<EventiPerGiorno>> map = new HashMap<String, List<EventiPerGiorno>>();

    List<List<EventiPerGiorno>> lists = new ArrayList(map.values());

    Collections.sort(lists, new Comparator<List<EventiPerGiorno>>() {
        @Override
        public int compare(List<EventiPerGiorno> o1, List<EventiPerGiorno> o2) {
            // ??? This is up to you.
            return 0;
        }
    });
于 2013-11-06T14:22:59.873 回答
1

这将对地图中的每个列表进行排序:

for (List<EventiPerGiorno> list : mapEventi.values()) {
    Collections.sort(list);
}

或者,如果您可能想要检索单个排序列表而不修改地图中的列表:

int someKey = ...;
List<EventiPerGiorno> list = new ArrayList<>(mapEventi.get(someKey));
Collections.sort(list);
return list;
于 2013-11-06T14:49:19.127 回答
0

您需要扩展 List 并使其实现 Comparable。没有可用于比较多个列表的默认自然排序。

集合框架不会知道您是否要按项目数、重复数或列表中的值对列表进行排序。

然后排序你使用:

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort%28java.util.List%29

于 2013-11-06T14:13:27.870 回答