Учитывая это отображение
SortedMap<Integer, String> myMap = new TreeMap<Integer, String>();
Вместо цикла for существует функция утилиты для копирования первых N элементов на карту назначения?
Учитывая это отображение
SortedMap<Integer, String> myMap = new TreeMap<Integer, String>();
Вместо цикла for существует функция утилиты для копирования первых N элементов на карту назначения?
Возможно, но не как часть стандартного Java API. И: утилита будет использовать цикл внутри.
Итак, вам понадобится цикл, но вы можете создать свою собственную "утилиту", выполнив все это в статическом методе в классе утилиты:
public static SortedMap<K,V> putFirstEntries(int max, SortedMap<K,V> source) {
int count = 0;
TreeMap<K,V> target = new TreeMap<K,V>();
for (Map.Entry<K,V> entry:source.entrySet()) {
if (count >= max) break;
target.put(entry.getKey(), entry.getValue());
count++;
}
return target;
}
Сложность все еще O (n) (я сомневаюсь, что можно достичь O (1)), но вы используете ее как инструмент без "просмотра" цикла:
SortedMap<Integer, String> firstFive = Util.putFirstEntries(5, sourceMap);
Там SortedMap.headMap()
, однако вам нужно будет передать ключ для элемента, который нужно выполнить. Вы можете перебрать N элементов над Map.keySet()
, чтобы найти его, например:
Integer toKey = null;
int i = 0;
for (Integer key : myMap.keySet()) {
if (i++ == N) {
toKey = key;
break;
}
}
// be careful that toKey isn't null because N is < 0 or >= myMap.size()
SortedMap<Integer, String> copyMap = myMap.headMap(toKey);
Использование мощности Java 8 +:
TreeMap<Integer, String> myNewMap = myMap.entrySet().stream()
.limit(3)
.collect(TreeMap::new, (m, e) -> m.put(e.getKey(), e.getValue()), Map::putAll);
Вы можете использовать функцию putAll (Map t) для копирования элементов с карты на указанную карту. Но она копирует все элементы. Вы не можете скопировать фиксированное количество элементов.
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Map.html#putAll%28java.util.Map%29
Вы также можете использовать упорядоченный итератор для получения первых х записей, упорядочивающих по убыванию имени, например:
Iterator<Integer> iterator = myMap.descendingKeySet().iterator();