2012-03-08 2 views
1

У меня есть LinkedHashMap, возвращающийся из db. На этой карте мне нужно получить именно последний элемент (ключ). Если я получу все ключи, используя метод keySet, он возвращает Set of keys, но Set не гарантирует порядок. Мне нужно взять именно последний ключ из связанного hashmap, возвращенного из db. Как я могу это сделать ?Получение последнего элемента из связанного хэшмапа, возвращаемого с уровня dao?

Ниже приведен код, как я получаю данные из базы данных.

LinkedHashMap<String,String> map = someDao.getMap(String input); 

с этой карты мне нужно взять последний элемент.

Спасибо!

+1

Последний элемент, в каком порядке? Лексикографическое? – Tudor

+0

Как вы сказали, на множестве нет заказов (отсюда и название). Как вы определяете * last *, если у вас нет заказа? Тот, который имеет наибольшее значение 'hashCode()'? Или тот, который вы положили на карту? Или тот, который находится в * самом глубоком * бункере? – rlegendi

+0

Привет, rlegendi, Спасибо за ваш ответ. Мне нужен тот, который находится в самом глубоком бункере. – user1016403

ответ

6

keySet() Выполняется на LinkedHashMap возвращает LinkedHashSet, что действительно является Set, но «запоминает» порядок элементов.

Вы можете получить последний элемент следующим образом:

Map<TheType> map = ..... 
................. 
TheType theLastKey = new ArrayList<>(map.keySet()).get(map.size() - 1) 
+4

Есть лучшие способы получить последнее значение итеративного пути, которые * не принимают O (n). Например, см. Файл Iterables.getLast от Guava. –

+0

Хорошая точка, @ Jon Skeet. Но я завернул набор с 'ArrayList', который не имеет такой проблемы. – AlexR

+2

Ну, код, который вы указали, даже не компилируется, но если это «новый ArrayList (map.getKeys()), то он * будет * обнаруживать эту проблему, потому что этот конструктор копирует все элементы. –

0

Ответ от другого поста помог мне с этим ответом. Pls ссылается Java HashMap: How to get a key and value by index? для оригинального сообщения.

Object myKey = myHashMap.keySet().toArray()[0]; 

где я заменил 0

toArray()[0] - (where 0 represents the first item in the keyset) 

с размером набора ключей

toArray()[(keyset().size)-1] 

Примечание: Без -1 в конце концов, вы получите ArrayIndexOutOfBoundsException.

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

  • Нет связанных вопросов^_^