Как я могу преобразовать свой SortedSet в карту с циклом while? - PullRequest
1 голос
/ 11 октября 2019

В следующем методе я сортирую TreeMap по значению ... и теперь я хочу добавить записи из SortedSet на карту.

static <K, V extends Comparable<? super V>>
SortedSet<Map.Entry<K, V>> entriesSortedByValues(Map<K, V> map) {
    SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<Map.Entry<K, V>>(
            new Comparator<Map.Entry<K, V>>() {
                @Override
                public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2) {
                    int res = e1.getValue().compareTo(e2.getValue());
                    return res != 0 ? res : 1;
                }
            }
    );
    sortedEntries.addAll(map.entrySet());
    return sortedEntries;
}

1 Ответ

0 голосов
/ 12 октября 2019

Этот метод сделает это

static <K, V> Map<K, V> toMap(Collection<Map.Entry<K, V>> coll) {
  Map<K, V> map = new LinkedHashMap<>();
  for (Map.Entry<K, V> e : coll) {
    map.put(e.getKey(), e.getValue());
  }
  return map;
}

Вы можете использовать любую карту для переменной map здесь. Но так как вы отсортировали записи ранее, вы можете сохранить порядок. Тогда LinkedHashMap будет хорошим выбором. Возможно, вы захотите выразить это в интерфейсе и написать вместо этого:

static <K, V> LinkedHashMap<K, V> toMap(Collection<Map.Entry<K, V>> coll) {

Обратите внимание, что ваш Comparator недействителен. Это должно быть всегда верно, но это не так:

comparator.compare(e, e) == 0
...