TreeSetсортировка с использованием задачи сравнения - PullRequest
0 голосов
/ 22 января 2019

Я хочу отсортировать TreeSet в Java 11. Я пытался использовать компаратор, но проблема в том, что лямбда-выражение не считает аргументы входом.

Я хотел сделать это:

SortedSet<Entry<Character, Long>> sortedSet = new TreeSet<>(map.entrySet(), 
    ((o1, o2) -> (int) (o1.getValue() - o2.getValue())));

, но проблема в том, что в TreeSet такого конструктора нет.Поэтому я попробовал другую процедуру:

SortedSet<Entry<Character, Long>> sortedSet = new TreeSet<>(map.entrySet())
    .comparator()
    .compare(o1,o2)

сравнить метод с необходимым параметром:

compare(capture of ? super Entry<Character, Long> o1, capture of ? super Entry<Character, Long> o1)

, но я не знаю, какие аргументы я должен передать вместо o1, o2.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

То, что нет конструктора, который бы делал все это одновременно, не означает, что вы не можете сделать это в 2 строки.

SortedSet<Entry<Character, Long>> sortedSet = new TreeSet<>(Comparator.comparingLong(Entry::getValue));
sortedSet.addAll(map.entrySet());
0 голосов
/ 22 января 2019

Сначала нужно создать набор

SortedSet<Entry<Character, Long>> sortedSet = new TreeSet<>((o1, o2) -> (int) (o1.getValue() - o2.getValue()));

, а затем добавить элементы

sortedSet.addAll(map.entrySet());

Невозможно установить компаратор после создания TreeSet.

PS: Сравнение значений с использованием - - плохая идея. Вам лучше использовать Integer.compare или создать компаратор, используя Comparator.comparing(Entry::getValue).

...