java - Set<> 为相同的值赋予不同的对象

标签 java android

您好,我正在尝试实现一个基于 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 应遵循其属性以避免重复项,但它为我提供了不同对象的相同值......就像这样......

Different objects for same value

更新:

这是我的模型类..

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());
}

Image of the Database

最佳答案

我试过你的代码,如果你删除注释,它似乎工作正常。

我的猜测是因为注释:

@RequiresApi(api = Build.VERSION_CODES.KITKAT)

方法equalshashCode 没有被注入(inject)。我强烈建议删除这些注释,因为 equalshashCode 绝不是 Kitkat API 的专属部分。它们从 Java 诞生之初就存在了。

关于java - Set<> 为相同的值赋予不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49872238/

相关文章:

Java TextField 日期自动填充

java - 处理异常的示例代码

java - Java中的并发读/写文件

android - 如何在android中使用选项执行unix 'top'命令

java - 为什么 C 函数不能将正确的参数传递给 java?

java - 代码 Socket clientSocket = new Socket();即使在单独的线程中,Android 应用也会崩溃

安卓 + Instagram "Redirect URI does not match registered redirect URI"

android - 如何更改向下的 ActionBar 的样式?

android - "Hello, WebView"教程在Android浏览器中打开请求的地址而不是在我的webview中

安卓 : TabLayout not responding to clicks