Как переставить элементы на карте на основе ключей другой карты - PullRequest
1 голос
/ 31 октября 2011

Привет У меня было требование, чтобы объекты карты располагались в порядке ключей другой карты.вот карта

Map ObjectMap = new HashMap()
ObjectMap .put(id1,Obj1);
ObjectMap .put(id2,Obj2);
ObjectMap .put(id3,Obj3);
ObjectMap .put(id4,Obj4);

Теперь карта рангов определяет порядок идентификаторов в ObjectMap

Map rankedMap = new HashMap()

rankedMap .put(rank1,id3);
rankedMap .put(rank2,id4);
rankedMap .put(rank3,id1);
rankedMap .put(rank4,id2);

Теперь я должен расположить объекты ObjectMap в соответствии с рангом каждого идентификатора, например

ObjectMap .put(id3,Obj1);
ObjectMap .put(id4,Obj2);
ObjectMap .put(id1,Obj3);
ObjectMap .put(id2,Obj4);

ids Long объекты

ranks int объекты

Пожалуйста, помогите Спасибо заранее

Ответы [ 3 ]

2 голосов
/ 31 октября 2011

'rankedMap' должен быть связанной картой, как сказано выше:

Map rankedMap = new LinkedHashMap()

rankedMap .put(rank1,id3);
rankedMap .put(rank2,id4);
rankedMap .put(rank3,id1);
rankedMap .put(rank4,id2);

затем вы можете перебирать идентификаторы в rankedMap, чтобы заполнить rankedObjectMap, который также является связаннымHashMap: (codeне проверено)

Map rankedObjectMap = new LinkedHashMap();
for(Object id : rankedMap.values()){
  rankedObjectMap.put(id, objectMap.get(id));
}
1 голос
/ 31 октября 2011

Вы можете попробовать с TreeMaps и пользовательскими компараторами.

1 голос
/ 31 октября 2011

HashMap не имеет определенного порядка. Если вы хотите упорядочить и все еще использовать время поиска O (1), предлагаемое HashMap, вы можете использовать LinkedHashMap , но учтите, что упорядочение в этой карте определяется порядком вставок. Вам придется позаботиться об этом, вставив элементы по порядку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...