【发布时间】:2017-09-12 13:00:22
【问题描述】:
这就是我正在做的:
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);
}
}
..
【问题讨论】:
-
您的 equals/hashCode 可能没有正确实现。在问题中包含他们的代码。
-
所以您声称您的代码是正确的,而
distinct()已损坏? -
userId和levelId是int? -
compareTo中的代码怎么样? -
@Eugene 我不明白为什么这是问题所在。 CompareTo 用于排序,而 hashCode 和 equals() 用于区分。 distinct 没有使用 compareTo。是吗?
标签: java java-8 java-stream