Как получить первые 10 пар ключ-значение в HashMap - PullRequest
6 голосов
/ 29 марта 2012

Я пытаюсь выполнить итерацию только первых «n» значений в моей карте, есть ли какой-либо метод или мне нужно управлять им только с помощью переменной count

Ниже приведен пример, я отсортировал группу имен, принадлежащих одному городу.Теперь я хочу только первые 10 городов и имена людей в нем.

for (Map.Entry<String, List<String>> entry : map.entrySet()) {
    List<String> list = entry.getValue();
    // Display list of people in City
}

Существует ли реализация Map, которая может содержать фиксированное количество пар ключ-значение?Пожалуйста, получите несколько направлений.

Спасибо,

-Виджай Селварадж

Ответы [ 3 ]

9 голосов
/ 29 марта 2012

Как получить первые 10 пар значений ключа в HashMap

HashMap неупорядочено .Это делает вопрос некорректным (если только «первым» вы не имеете в виду «произвольный»).

Если вы хотите последовательное упорядочение ключей, вам нужно изменить тип вашей карты на SortedMap, например TreeMap.

В качестве альтернативы, если вы выбираете самые старые элементы (т. Е. Те, которые вы вставили первыми), то LinkedHashMap - это ответ.

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

3 голосов
/ 29 марта 2012

Я пытаюсь выполнить итерацию только первых «n» значений на моей карте, есть ли какой-либо метод или мне нужно управлять им только с помощью переменной count.

Ближайшая вещь, которую вы найдете, используя только стандартный API коллекций (который все еще немного хуже, чем IMO со счетчиком), следующая:

List<Map.Entry<String, List<String>> entryList =
        new ArrayList<Map.Entry<String, List<String>>(map.entrySet());

for (Map.Entry<String, List<String>> entry : entryList.subList(0, 10)) {
    List<String> list = entry.getValue();
    // Display list of people in City
}

Длинных параметров типа можно избежать, используя причудливый бриллиант из Java 7:

List<Map.Entry<String, List<String>> entryList = new ArrayList<>(map.entrySet());

или с помощью перебора ключей и .get соответствующих значений.

2 голосов
/ 29 марта 2012
List<List<string>> list = new ArrayList<List<String>>();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
  if (list.size() > 9) break;
    list.add(entry.getValue());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...