Похоже, вы решили хотя бы часть вашей проблемы. Однако я бы предложил несколько уточнений.
Возможно, вы хотите, чтобы тип параметра был SortedMap
, поэтому вы случайно не проходите мимо чего-то вроде простого HashMap
, для которого нет определенного порядка. Возможно, вам понадобится тип возврата SortedMap
. Чтобы выполнить эту работу, вы должны использовать перегрузку с четырьмя аргументами Collectors.toMap
, чей четвертый аргумент является поставщиком, который позволяет вам управлять построением карты. Если вы этого не сделали, вы получите простой HashMap
.
Третий arg - это функция слияния, которая вызывается при объединении нескольких значений для одного и того же ключа. Вы знаете, что ключи уникальны, поскольку вы в первую очередь вынимаете их из карты, поэтому нам не нужно беспокоиться об этом. Я только что получил это первое значение, но вы также могли бы заставить его выбросить исключение или что-то еще.
Наконец, вам не нужно проверять размер спереди, так как limit(n)
будет работать нормально, если n
больше, чем количество пропущенных элементов.
Пересмотренный код будет выглядеть следующим образом:
public static <K,V> SortedMap<K,V> getFirstEntries(SortedMap<K,V> sortedMap, int elementsToReturn) {
return sortedMap.entrySet()
.stream()
.limit(elementsToReturn)
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue,
(v1,v2) -> v1, TreeMap::new));
}
И ваш вопрос? –
это не работает, компилятор означает Map.Entry :: getKey, Map.Entry :: getValue имеет циклический вывод – user3411187
Решенный .. Мне просто нужно было добавить общие типы public static Карта getFirstEntries (окончательная карта .. –
user3411187