这是代码:
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();
分数使用userId
表示equals和hashCode(hashCode只是return userId;
)
我正在做一些错误的假设,我不知道是否使用天花板来做我想做的事情:检索已经存在于集合中的元素具有相同的userId(当它出现时)。 / p>
答案 0 :(得分:1)
如果o1&lt; Comparator,则应返回负整数。 O 2。
返回:
第一个参数的负整数,零或正整数小于,等于或大于第二个参数。
因此你应该颠倒顺序:
if (o2.equals(o1))
return 0;
else
return o1.getScore() - o2.getScore();