Java比较int数组,过滤并插入或更新到DB

时间:2017-01-03 10:59:40

标签: java arrays

我写了一个应用程序,帮助组织家庭账单。问题是,在一个家庭中可以住多个人,一个人可以有一个以上的家(例如我 - 在这两种情况下:))。因此,我决定让用户将承包商(支付接收方)绑定到多个用户和多个家庭。

在我的数据库中,帐户和承包商之间以及房屋和承包商之间存在串联表。太好了,不是吗?

现在,重点是我将相关用户(或房屋)的列表作为sql数组获取,最后我将其保留为Integer []数组。我已经制作了一些虚拟数据库条目,所以我可以测试它的功能并且工作正常。

但是......我完全不知道如何在数据库中正确存储更改的值。我的表的结构是:

用户 id |用户名| .... 1 | user1 | ... 2 | user2 | ...

承包商 id |名字| ... 1 |承包商1 | ...

users_contractors user_id | contractor_id | IS_DELETED 1 | 1 |假 1 | 2 |假 等......

所以我拥有的是:与承包商相关的一组用户和与contrator相关的第二个用户数组(修改后的用户)。现在我需要将值存储在DB中。当用户+承包商不存在时 - 我需要插入该关系。如果它已经存在于数据库中,但在我的数组中不存在(例如连接被删除) - 我需要更新关系表并标记为deleted = true。

我找到了一些关于如何比较两个数组的解决方案,但它们都假设数组的长度相同,并且它们只比较具有相同索引的值。

所以我需要的是比较我们说的不是数组,但数组值(如果一个数组包含来自另一个数组的值,或相反)。这可以在没有forloop-in-forloop的情况下实现吗?

提前谢谢你。 汤姆

2 个答案:

答案 0 :(得分:2)

你有没有理由使用数组而不是列表/集合?这些可以帮助您搜索项目,并更容易比较其中两个。

我现在没有IDE,所以这里有一些伪代码:

// Create a list with all the values (maybe use a hashset to prevent duplicates)
List<int> all = new List();
all.addAll(A);
all.addAll(B);

//for each loop
for (int i : all) {
    boolean inA = A.contains(i);
    boolean inB = B.contains(i);
    if (inA && inB) {
    // You can figure out the rest of these statements I think
    }
}

答案 1 :(得分:1)

感谢@DrIvol - 我设法使用代码解决了这个问题:

List<Integer> allUsers = new ArrayList<Integer>();
    allUsers.addAll(bean.getUserId());
    allUsers.addAll(bean.getNewUserId());
    for(Integer i : allUsers) {
        Boolean oldValue = bean.getUserId().contains(i);
        Boolean newValue = bean.getNewUserId().contains(i);
        if(oldValue && newValue) {
            System.out.println(i + " value in both lists");
            // Nothing to do
        } else if (oldValue && !newValue) {
            System.out.println(i + " value removed");
            // Set value as deleted
        } else if(!oldValue && newValue) {
            System.out.println(i + " value added");
            // Insert new value to concat table
        }
    }

它有一个问题:如果值在第一个列表中,并且它仍然在第二个列表中(没有修改) - 它会被检查两次。但是,因为我不需要对这个值做任何事情 - 现在它是可以接受的。有一天,当我完成测试版时 - 我会做一些优化,所以我会为列表制作一些重复数据删除器:)

非常感谢!

汤姆