java - 有没有办法在使用列表时不会更改列表中的原始值?
问题描述
一个列表中有几个列表...现在我尝试从第二个列表中减去第一个列表的值...从第三个列表中减去第二个列表的值...从第四个列表中减去第三个列表的值等等上..
例子:
清单 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();
推荐阅读
- arrays - Elasticsearch 嵌套元素获取
- abaqus - Isight 不读取 Abaqus .cae 文件
- audio - 在未压缩的 PCM 中找到单个频率的最佳方法
- c# - MongoDB C# 驱动程序:使用内部构造函数是不可能的?
- templates - 类模板错误 C2510: 'T': left of '::' must be a class/struct/union
- python - 看门狗:OSError:[Errno 9] 带有看门狗的错误文件描述符
- c# - Prism:通过事件关闭对话
- ios - 如何从 Mac 中删除 Xcode 模拟器测试版
- git - 带有跟踪不同分支的子模块的 Git Repo
- r - r中的RC类结构