使用另一个 String ArrayList 使用单循环从自定义 ArrayList 中删除匹配值,该循环用于将值添加到 sqlite

Remove matching values from custom ArrayList using another String ArrayList using single loop which use to add values to sqlite

我的 Android 应用程序中有自定义 ArrayList 和 String ArrayList。我正在使用一个 for 循环将自定义列表值添加到 sqlite。我还删除了自定义 ArrayList 中的行,这些行将在添加到 sqlite 之前与 String ArrayList 的值匹配。为此,我必须使用两个 for 循环。我可以在 sqlite 添加循环中实现吗?

 ArrayList<String> localRefNoList = new ArrayList<>();
 ArrayList<SynchronizDTO> arr_sync = new ArrayList<>();
 
 public class SynchronizDTO {

    private String userName;
    private String referenceNo;
    private String employeeNo;

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getReferenceNo() {
        return referenceNo;
    }
    public void setReferenceNo(String referenceNo) {
        this.referenceNo = referenceNo;
    }
    public String getEmployeeNo() {
        return employeeNo;
    }
    public void setEmployeeNo(String employeeNo) {
        this.employeeNo = employeeNo;
    }

}


for (int i = 0; i < arr_sync.size(); i++) {
    for (String ss : localRefNoList) {
        if (ss.equals(arr_sync.get(i).getReferenceNo().trim())) {
            arr_sync.remove(i);
        }
    }
}
                

for (int i = 0; i < arr_sync.size(); i++) {

    ContentValues cv = new ContentValues();

    cv.put(DatabaseHelper.userName, arr_sync.get(i).getUserName().trim());
    cv.put(DatabaseHelper.referenceNo, arr_sync.get(i).getReferenceNo().trim());
    cv.put(DatabaseHelper.employeeNo, arr_sync.get(i).getEmployeeNo().trim());

    try {
        restoreLogRes = db.insertOrThrow(DatabaseHelper.tbl_sms, null, cv);
    } catch (Exception ex) {

    }
}

您可以添加一个标志变量来一次完成此操作。如果你在删除循环而不是 sqlite 添加循环上执行它会更直观。这里我稍微优化一下。还要记住不要在这里调用 (int i = 0; i < arr_sync.size(); i++) 。它将一次又一次地计算列表大小。而是这样做:

int length = arr_sync.size();

for (int i = 0; i < length; i++) {

    boolean flag = true;

    for (String ss : localRefNoList) {
        if (ss.equals(arr_sync.get(i).getReferenceNo().trim())) {
            arr_sync.remove(i);
            flag = false;
            break;
        }
    }

    if(flag){

        ContentValues cv = new ContentValues();

        cv.put(DatabaseHelper.userName, arr_sync.get(i).getUserName().trim());
        cv.put(DatabaseHelper.referenceNo, 
        arr_sync.get(i).getReferenceNo().trim());
        cv.put(DatabaseHelper.employeeNo, arr_sync.get(i).getEmployeeNo().trim());

        try {
            restoreLogRes = db.insertOrThrow(DatabaseHelper.tbl_sms, null, cv);
        } catch (Exception ex) {

        }
    }

}