这是我代码的相关部分:
List<List<String>> list2 = new ArrayList<>();
public void process(List<String> z) {
if (z.size() > 0) {
String x = z.get(0);
List<String> temp = new ArrayList<>();
z.stream().filter(e -> !e.equals(x)).forEach(e -> {
// some operations on temp
});
list2.add(temp); // adding temp to list2
z.removeIf(e -> temp.contains(e));
temp.clear(); // clearing temp
z.forEach(System.out::println);
list2.forEach((System.out::println)); // empty list2
process(z);
list2.forEach(e -> process(e));
}
我需要在递归调用“process”之前清除临时变量。问题在于,当我清除“temp”时,我的“list2”变为空。
由于我在lambda表达式中使用了“temp”,因此我不能将其重新分配为“null”或“new ArrayList<>”(否则它就可以工作了)。
我考虑创建一个新的列表,并在“temp”和新列表之间进行复制,但这不是一个合适的方法。
还有其他方法吗?
process
之前,我必须清除临时文件。” - 为什么? - Turing85temp
引用了一个也存储在list2
中的列表,这有什么问题呢? - Turing85temp
是一个局部变量。每次递归调用都会有自己的temp
副本。不需要清空它。事实上,循环的每次迭代都会有一个新的temp
变量。 - Turing85z.removeIf(e -> temp.contains(e))
是z.removeAll(temp)
的一个效率较低的版本。通常来说,你似乎有过度使用 lambda 表达式的习惯。 - Holger