首页 > 解决方案 > 有没有办法在使用列表时不会更改列表中的原始值?

问题描述

一个列表中有几个列表...现在我尝试从第二个列表中减去第一个列表的值...从第三个列表中减去第二个列表的值...从第四个列表中减去第三个列表的值等等上..

例子:

清单 1:

清单 2:

清单 3:

所以在这个例子中,我们从列表二中的 25 中的列表一中减去 30,从列表二中的 15 中的列表一中减去 20,从列表二中的 5 中的列表一中减去 10。下一步,我们从列表三中的 36 个中的列表一中减去 25,从列表三中的 95 个中的列表二中减去 15,从列表三中的 14 个中的列表二中减去 5,从列表三中的 12 中的列表一中减去 36。

结果应该是这样的:

清单 1:

清单 2:

清单 3:

这些列表是它应该如何工作的一个例子。在我的以下代码中,它不像我想象的那样工作。

    for (int i = 0; i < a_l_v_eList.size() - 1; i++) {

        List<AccountlinevaluesEntity> firstMonth = a_l_v_eList.get(i);
        List<AccountlinevaluesEntity> tempList = new ArrayList<>(a_l_v_eList.get(i + 1));

        for (int j = 0; j < tempList.size(); j++) {

            AccountlinevaluesEntity nextMonthElementTemp = tempList.get(j);

            for (int k = 0; k < firstMonth.size(); k++) {

                AccountlinevaluesEntity firstMonthElement = firstMonth.get(k);

                if (nextMonthElementTemp.getAccountNumber() == firstMonthElement.getAccountNumber()) {

                    nextMonthElementTemp.setAmount(subtractAmount(firstMonthElement.getAmount(), nextMonthElementTemp.getAmount()));

                    //i + 1 so, we don´t overwrite the first element
                    finalList.get(i + 1).add(nextMonthElementTemp);
                    break;
                }
            }
        }
    }

在这一行中List<AccountlinevaluesEntity> tempList = new ArrayList<>(a_l_v_eList.get(i + 1)); ,我得到了下一个列表。计算完这些值后,会将它们添加到新列表中。不幸的是,下一次运行循环时,它将不再包含先前下一个列表的原始值,而是计算值。

我的问题是列表中的原始值可能被覆盖了。

除其他外,我在 for 循环之外创建了临时列表......并使用 List.copyOf()。但问题总是一样的。

我希望我能以一种可以理解的方式描述这个问题,你可以帮助我。

标签: javalistfor-looparraylist

解决方案


即使您不更改原始列表,也会更改这些列表中的对象。您需要制作 的深层副本nextMonthElementTemp,具体取决于类的AccountlinevaluesEntity外观,这可以通过不同的方式完成。

但在最基本的情况下,您需要替换这一行:
AccountlinevaluesEntity firstMonthElement = firstMonth.get(k);
用这样的东西:
AccountlinevaluesEntity firstMonthElement = firstMonth.get(k).clone();


推荐阅读