我正在努力在Java中创建一个能够编辑半任意嵌套Map
的递归方法。我需要能够遍历Map
,然后编辑和/或删除任意值。这种方法适合更大的应用程序,因此有一些我无法控制的部分。
我在一些限制条件下工作:
Map
。任何返回值都会被更大的应用程序忽略。Map
可能很大(超过250 MB)。我需要避免创建它的临时副本。Map
List
Map
。ConcurrentModificationException
s 我已经为这个问题编了一个例子。对于这个问题,如果Map
返回List
(它已被硬编码为适用于一些额外的简化)。首先,这是包含我一直在使用的递归逻辑的类。
canRemove
这是一个带有main方法的虚拟类,可用于执行FooModifier以用于说明目的。
true
最后,这是虚拟主类使用的虚拟数据文件:
import java.util.Iterator;
import java.util.List;
import java.util.Map;
// the Modifier Interface is part of the larger application in which this Class plugs into
public class FooModifier implements Modifier
{
private void recursiveModifier(Map<String, Object> dataMap, String path)
{
for (Iterator<Map.Entry<String, Object>> it = dataMap.entrySet().iterator(); it.hasNext();)
{
Map.Entry<String, Object> entry = it.next();
if (entry.getValue() instanceof Map< ? , ? >)
{
// recursively call recursiveModifier on entry.getValue(),
recursiveModifier((Map<String, Object>) entry.getValue(), path + "." + entry.getKey());
}
else if (entry.getValue() instanceof List)
{
String listPath = path + "." + entry.getKey();
if (canRemove(listPath))
{
it.remove();
}
else
{
// May change modify other types, but not for this example
}
}
}
}
public void recursiveModifier(Map<String, Object> data)
{
// Call private recursive function with data and empty path string
recursiveModifier(data, "");
}
@Override
public void run(Map<String, Object> data)
{
recursiveModifier(data);
// Do other stuff
}
private boolean canRemove(String listPath)
{
// Would perform logic to check if given path can be removed.
// For this example, just set to true
return true;
}
}
到目前为止,我提供了我正在使用的内容,但我不确定它是执行此任务的最有效方式。我有兴趣看看是否有更好的方法。
执行此任务的最佳方式是什么?请解释为什么你的答案是最佳的。