2013-03-19 4 views
1

если я сделать карту, как это:рода карта, которая содержит массив объектов

Map<Object, ArrayList<Object>> multiMap = new HashMap<Object, ArrayList<Object>>(); 

есть способ для меня, чтобы отсортировать по значениям в ArrayList<Object>?

я думал просто зацикливание через Multimap как таковую:

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 (CONTA модули 2 элементов) объект ---> ArrayList (содержит 2 элемента) объекта ---> ArrayList (содержит 2 элемента)

я хочу взять все элементы все выше и упорядочить те ArrayLists. он не должен оставаться в Multimap .. я просто смотрел, чтобы увидеть, есть ли лучший способ сделать это ..

EDIT: точка здесь, чтобы отсортировать все элементы массива в каждом arrayList против всех других элементов массива в каждом другом массиве ... так что это не так просто, как просто вызвать сортировку , но мне интересно, есть ли лучший способ сделать это? я не так хорошо знаком с картами ... любая помощь была бы оценена.

+2

'Collections.sort()' - попробуйте это. – SudoRahul

+0

@RJ, но я хочу отсортировать все списки массивов друг против друга ... как каждое значение во всех массивах по отношению ко всем другим значениям во всех других списках массивов ... так что это не так просто .. – BigBug

+0

@BlueMonster: это не очень ясно, что именно вы хотите. Можете ли вы предоставить некоторые примеры данных и как их сортировать? (Также: эта структура данных намекает на возможное [отказ объекта] (http://stackoverflow.com/a/3725728/40342)). –

ответ

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

+0

, отлично, спасибо миллион – BigBug

0

На самом деле вам все равно, что ArrayList является значением на карте, это не имеет значения. Вы бы отсортировали этот ArrayList<Object> так, как бы вы хотели сортировать любой такой список. Проблема здесь в том, что вам придется реализовать какой-то Компаратор, который переводит объект в нужный тип. В общем, я лично сделал бы ArrayList более конкретного типа, чем Object, чтобы упростить сортировку.

0

Ознакомьтесь с многопользовательскими реализациями Apache Commons и Google Collections. У них может быть такой, который уже поддерживает сортировку/упорядочение.