TreeSet <entry <character,long =“”>使用比较器问题进行排序

时间:2019-01-22 10:26:15

标签: java sorting generics comparator treeset

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

我想这样做:

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 :(得分:2)

仅仅因为没有构造函数可以一次完成所有操作,并不意味着您不能在两行中完成操作。

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

答案 1 :(得分:1)

您必须先创建集合

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)创建比较器。