По определению, карта не имеет индекса.Возможно, вы пытаетесь присвоить элементам карты номер, начиная с 1, в соответствии с порядком вставки .Если вы используете LinkedHashMap
, есть способ сделать это.
Однако HashMap
не дает никаких гарантий относительно порядка карты.Кроме того, это не гарантирует, что заказ останется постоянным с течением времени;Таким образом, присвоение этим записям нумерации не всегда приведет к ожидаемому результату.
Тем не менее, вы можете захотеть пронумеровать записи на карте только от 1
до n
, где n
- это размеркарты и не относятся к порядку вставки записей, как указано выше, т.е. первая вставленная запись не обязательно должна быть пронумерована как 1, а вторая вставленная запись не обязательно должна быть пронумерована как 2 и т. д.
Теперь, к решению:
Вы можете иметь List<Map<String, Integer>>
в качестве временного набора результатов, и когда вам нужна нумерация записей, просто зациклите элементы и получите нумерацию с помощью i + 1
где i
- управляющая переменная.
пример, предполагая, что у нас есть этот список:
List<Map<String, Integer>> temporaryResult = myMap.values()
.stream()
.map(a -> a.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey,
c -> c.getValue().size()))
)
.collect(Collectors.toList());
тогда мы можем получить Map<Integer, Map<String, Integer>>
с:
Map<Integer, Map<String, Integer>> resultSet =
IntStream.range(0, temporaryResult.size())
.mapToObj(i -> new AbstractMap.SimpleEntry<>(i + 1,
temporaryResult.get(i)))
.collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey,
AbstractMap.SimpleEntry::getValue));
Примечание -
- Если нумерация должна основываться на порядке вставки, этот код даст ожидаемый результат, только если используемая карта поддерживает порядок вставки.
- Если онемениеering не обязательно основан на порядке вставки записей в карту, тогда это решение будет работать независимо от используемой реализации карты.