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());
我想对 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());