您好,我正在尝试实现一个基于 SQLite 的应用程序,并且在我的数据库表中有一些值。我的专栏之一包含一些相似的值,为了克服重复,我使用了 set<>
public Set<NewTableAnswers> newtableAnswers(String product_id) {
Set<NewTableAnswers> d = new HashSet<>();
SQLiteDatabase db = this.getReadableDatabase();
String SelectA1 = "SELECT * FROM " +TABLE_ANSWERS+ " WHERE " + ANSWER_ID + " = '"+ product_id + "' ";
Cursor cursor = db.rawQuery(SelectA1,null);
if (cursor.moveToFirst()){
do{
d.add(new NewTableAnswers(cursor.getString(1)));
}while (cursor.moveToNext());
}
db.close();
return d;
如果有重复项,set 应遵循其属性以避免重复项,但它为我提供了不同对象的相同值......就像这样......
更新:
这是我的模型类..
public class NewTableAnswers {
String pro_id;
public NewTableAnswers(String pro_id) {
this.pro_id = pro_id;
}
public String getPro_id() {
return pro_id;
}
public void setPro_id(String pro_id) {
this.pro_id = pro_id;
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof NewTableAnswers)) return false;
NewTableAnswers that = (NewTableAnswers) o;
return Objects.equals(getPro_id(), that.getPro_id());
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public int hashCode() {
return Objects.hash(getPro_id());
}
最佳答案
我试过你的代码,如果你删除注释,它似乎工作正常。
我的猜测是因为注释:
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
方法equals
和hashCode
没有被注入(inject)。我强烈建议删除这些注释,因为 equals
和 hashCode
绝不是 Kitkat API 的专属部分。它们从 Java 诞生之初就存在了。
关于java - Set<> 为相同的值赋予不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49872238/