java - NavigableSet 的方法上限不返回带有比较器的预期元素

标签 java set comparator

这是代码:

    Score alpha = new Score(1,91);
    Score beta = new Score(1,81);
    Score gamma = new Score(5,85);
    NavigableSet<Score> set = new ConcurrentSkipListSet<>(new ScoreComparator());

    set.add(beta); set.add(gamma);

    assertThat(set.size(),is(equalTo(2)));
    assertThat(set.ceiling(alpha), is(equalTo(beta)));

由于以下错误而失败:

Expected: is <Score{userId=1, score=81}>
     got: <Score{userId=5, score=85}>

这是比较器:

if(o2.equals(o1)) return 0;
else return o2.getScore() - o1.getScore();

Score 使用 userId 来表示 equals 和 hashCode(hashCode 只是 return userId;)

我正在做一些错误的假设,我不知道是否使用上限来实现我想要做的事情:检索具有相同 userId 的集合中已经存在的元素(当它存在时)。

最佳答案

Comparator如果 o1 < o2,则应返回负整数。

Returns:
a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

因此您应该颠倒顺序:

if (o2.equals(o1)) 
    return 0;
else 
    return o1.getScore() - o2.getScore();

关于java - NavigableSet 的方法上限不返回带有比较器的预期元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25516294/

相关文章:

java - 将零填充到一位数以形成分钟格式

JAVA Swing GridLayout 无法正常工作

带有整数的python集将大于10的整数分成两位数

java - 根据教师 ID 对学生列表进行排序

java - Comparator.comparing().reversed() 反转所有早期的比较器?

java - Eclipse 插件,在选项卡标题旁边的轮廓上添加按钮

java - 从 MoPub sdk 创建一个 jar

c# - 如何使用 LINQ 从一组数字中查找 n 项的所有组合?

javafx - 如何使用 Set 作为 TableView 的基础

java - 如何在java中对ArrayList的ArrayList进行排序?