这是我正在做的事情:
List scores = Stream.concat(oldEntries.stream(), newEntries.stream())
.sorted()
.distinct()
.limit(maxSize)
.collect(Collectors.toList());
我希望得到一个去重的有序列表,但有时列表中会出现重复项。
我已经重写了hashCode和equals方法,并观察到这些方法每次都返回正确的值。有人能看出我的流代码有什么问题吗?
这是我的equals()和hashCode()方法,它们是由IDEA自动生成的:
..
private int userId;
private int levelId;
private int score;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Score score = (Score) o;
if (userId != score.userId) return false;
return levelId == score.levelId;
}
@Override
public int hashCode() {
int result = userId;
result = 31 * result + levelId;
return result;
}
public int compareTo(Score other) {
if (other == null) {
return 1;
} else {
return Integer.compare(other.score, this.score);
}
}
..
userId
和levelId
是int
类型的吗? - ByeByecompareTo
方法中的代码怎么样? - KayamancompareTo
与hashCode/equals
不一致。 - Eugene