2014-11-06 2 views
4

В настоящее время у меня есть упорядоченный список String ids (List<String>) и неупорядоченный список пользовательского класса (List<CustomClass>). Я хотел бы заказать список пользовательских объектов класса на основе упорядоченного списка IDS.Сортировка списка на основе другого списка

У меня создалось впечатление, что лучший способ сделать это - использовать TreeMap. Поэтому я осуществил это:

Map<String, CustomClass> mapB = new HashMap<String, CustomClass>(); 
    for (String id : mIds) { 
     for (CustomClass customClass : mCustomClass) {     
      mapB.put(thingId, mCustomClass); 
     } 
    } 

Map<String, CustomClass> treeMap = new TreeMap<String, CustomClass>(); 
treeMap.putAll(mapB); 

Хотя, он сохраняет все идентификаторы хорошо, но когда я распечатайте TreeMap, кажется, как будто он только принимает последнее значение mapB и магазинов, что. То есть пример журналов:

Карта: 1: Париж, Карта: 2: Париж, карта: 3: Париж

Но я прибавлял:

mapB.put("1", London); 
mapB.put("2", Berlin); 
mapB.put("3", Paris); 

Так что да, Я немного смущен тому, что происходит, может ли кто-нибудь дать какие-то рекомендации? Благодаря!

+0

Являются ли строки в списке в любом случае в CustomClass? – SMA

+0

Доступ к идентификатору осуществляется из модели этого класса, но он не сохраняется как локальная переменная или что-то еще. –

+0

Просьба указать связь между списком и списком , а также с реализацией CustomeClass. И если любое поле в CustomClass соответствует любому из элементов, присутствующих в списке SMA

ответ

3

Это потому, что вы используете два fors. Таким образом, это добавляет в карте значения: 1 - Лондон 1 - Берлин 1 - Париж 2 - Лондон 2 - Берлин 2 - Париж 3 - Лондон 3 - Берлин 3 - Париж

TreeMap запоминает только последнее значение, которое вы вводите для каждого индекса, а для Парижа - для всех.

Если вы знаете, что у вас есть соответствующие элементы в mIds и mCustomClass [одинаковой длины], просто используйте один для и просто используйте mapB.put (mIds [i], mCustomClass [i]).

Для более общего подхода, если у вас есть соответствующие элементы в двух массивах (или коллекциях), вам следует подумать о создании лучшего объекта с двумя полями (id и class) и просто написать свой собственный Компаратор для этого объекта, что учитывает только идентификатор.

Смежные вопросы