2013-11-06 2 views
0

У меня есть эта карта:Java заказать коллекцию

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

где EventiPerGiorno является Сопоставимые объект. Как я могу получить отсортированный список с карты?

Я попытался с

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

Но Comparable.sort() не нравится список сопоставимыми. Есть ли ComparableList?

EDIT

это сопоставимый метод ...

public class EventiPerGiorno implements Comparable<EventiPerGiorno>{ 


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

} 
+0

Можете ли вы показать, как вы реализовали Comparable для EventiPerGiorno? –

+1

Проблема в том, что у вас есть список списков. Что именно вы хотите отсортировать список списков? Размер? – MadConan

+1

Поскольку «EventiPerGiorno» является итальянским для «событий в день», я предполагаю, что вы как-то захотите заказать события на этом. Однако мне непонятно, хотите ли вы сохранить их в наборе списков. Или это нормально, чтобы поместить все из них в один список и отсортировать _that_? – CompuChip

ответ

1

Collections Java не имеют никакого порядка, связанные с ними. Сначала вы можете поместить Collection в List, а затем отсортировать его.

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

Для этого вам нужно будет создать своего рода List, который реализует Comparable. См. Пример How do I correctly implement Comparable for List in this instance?.

Уточнить, что это сортировка объектов типа List<EventiPerGiorno>, а не объектов типа EventiPerGiorno. Если вы заинтересованы в сортировке последнего, вы можете захотеть этого вместо этого:

ArrayList<EventiPerGiorno> bigList = new ArrayList<EventiPerGiorno>(); 
for (List<EventiPerGiorno> list : mapEventi.values()) { 
    bigList.addAll(list); 
} 
Collections.sort(bigList); 
+0

Я не думаю, что это нужно, чтобы обернуть список в коллекции, не так ли? То же самое касается ArrayList –

+0

@AndrewJones ваш код выше пытается сортировать коллекцию списков. Это то, что вы действительно хотите сделать? Или вы пытаетесь отсортировать каждый список. – Dodd10x

+0

@AndrewJones и Dodd10x Я согласен с тем, что странно сортировать списки, а не содержимое списка, но это похоже на то, что хочет сделать этот вопрос. –

0

Вы должны были бы расширить список и сделать его реализацию Сопоставимым. Не существует естественного упорядочения по умолчанию, которое может использоваться для сравнения нескольких списков.

Структура коллекций не будет знать, хотите ли вы отсортировать список по количеству элементов, количеству дубликатов или значениям в списке.

Тогда для сортировки используется:

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

1

Вы пытаетесь отсортировать список списков. Список не реализует 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; 
     } 
    }); 
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; 
Смежные вопросы