gpt4 book ai didi

java - 有没有一种方法可以在使用列表时不更改列表中的原始值?

转载 作者:行者123 更新时间:2023-11-30 09:59:08 25 4
gpt4 key购买 nike

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

示例:

列表 1:

  • 30、20、10

列表 2:

  • 25、15、5、36

列表 3:

  • 36、95、14、12、44

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

结果应该是这样的:

列表 1:

  • 30、20、10

列表 2:

  • -5, -5, -5, 36

列表 3:

  • 11、80、9、-24、44

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

    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()。但问题总是一样的。

我希望我能以一种易于理解的方式描述问题,您可以帮助我。

最佳答案

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

但在最基本的场景下,你需要替换这一行:
AccountlinevaluesEntity firstMonthElement = firstMonth.get(k);
像这样:
AccountlinevaluesEntity firstMonthElement = firstMonth.get(k).clone();

关于java - 有没有一种方法可以在使用列表时不更改列表中的原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59138070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com