首页 > 解决方案 > 如果 ArrayList 中存在世界,Android SQLite 忽略添加

问题描述

我正在使用 Android SQLite 添加一些 ArrayList。我想这样做:如果有我将在列表中和任何地方选择的世界,我想阻止添加它。

例如; 如果 ArrayList 中存在“Duck U”,我想忽略添加数据库。

我累了list.contains("Duck u");,但没有工作。

我添加到数据库的代码:

public void HistoryADD(ArrayList<String> full, String owner){
    int size = full.size();
    SQLiteDatabase db = getWritableDatabase();
    try{
        for (int i = 0; i < size ; i++){
            ContentValues cv = new ContentValues();
            cv.put(FULL, full.get(i));
            cv.put(OWNER, owner);
            Log.d("Added ",""+ cv);
            db.insertOrThrow(TABLE_NAME, null, cv);
        }
        db.close();
    }catch (Exception e){
        System.out.println("Could not added");
    }}

有样品吗?非常感谢。

标签: androidsqlite

解决方案


我相信以下可能是一个解决方案(注意它可以满足多个单词(字符串)被忽略(跳过插入))

这使用了一种方法,即将ifHaystackContainsNeedle针对另一个 ArrayList(the Needle)搜索一个 ArrayList(the Haystack)(因此可以忽略多个字符串)。如果在大海捞针中找到任何针,则此方法返回 true。因此,如果返回 true,您可以继续 for 循环,从而跳过

public void HistoryADD(ArrayList<String> full, String owner,ArrayList<String> ignore){
    int size = full.size();
    SQLiteDatabase db = getWritableDatabase();
    try{
        for (int i = 0; i < size ; i++){
            //<<<<<<<<<< START OF ADDED TEST
            if (ifHaystackContainsNeedle,owner,ignore) {
                Log.d("Skipped ","Owner " + get(i) + " was skipped.");
                continue;
            }
            //<<<<<<<<<< END OF ADDED TEST
            ContentValues cv = new ContentValues();
            cv.put(FULL, full.get(i));
            cv.put(OWNER, owner);
            Log.d("Added ",""+ cv);
            db.insertOrThrow(TABLE_NAME, null, cv);
        }
        db.close();
    }catch (Exception e){
        System.out.println("Could not added");
    }}


//<<<<<<<<<< NEW METHOD
private boolean ifHaystackContainsNeedle(ArrayList<String> haystack, ArrayList<String> needle) {
    for (String s: haystack) {
        for (String s2: needle) {
            if (s.contains(s2)) {
                return true;
            }
        }
    }
    return false;
}
  • 请注意,这是原则上的代码,并且已经过全面测试,因此可能包含一些错误。

推荐阅读