TreeSet<Entry<Character, Long> 使用比较器排序问题

TreeSet<Entry<Character, Long> sort using comparator problem

我想对 Java 11 中的 TreeSet 进行排序。 我尝试使用比较器,但问题是 lambda 表达式不将 args 视为条目。

我想这样做:

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。

你必须先创建集合

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).

创建比较器

仅仅因为没有构造函数一次完成,并不意味着你不能分两行完成。

SortedSet<Entry<Character, Long>> sortedSet = new TreeSet<>(Comparator.comparingLong(Entry::getValue));
sortedSet.addAll(map.entrySet());