如果不存在新列表,如何更好地测试和创建新列表?
我只找到了这个解决方案:
private List<List<Action>> actionList = Lists.newArrayList();
...
f(int index){
Optional<List<Action>> optionalActionList = Optional.fromNullable(actionList.get(index));
if (!optionalActionList.isPresent()) {
actionList.add(new ArrayList<Action>());
}
actionList.get(index).add(index, new Action());
}
也许我应该改变存储结构?(添加顺序。能够添加列表的开头和结尾。在这两个列表中都很重要)。如果需要,可以使用谷歌番石榴。
目前尚不清楚Optional
到底在为您购买什么。我认为Optional
的值是在方法之间或在存储中进行通信。
此外,我不认为代码正在做你认为的事情——你要求特定索引处的列表,但如果该索引处的值为null,你将在末尾添加一个新列表。听起来你想要:
f(int index){
List<Action> list = actionList.get(index);
if (list == null) {
list = new ArrayList<Action>();
actionList.set(index, list);
}
// Note: no need to use index at all here... potentially
list.add(new Action());
}
请注意,我不是最后使用add(index, new Action())
-当时还不清楚你为什么要这样做。你已经找到了使用index
的正确列表-为什么要再次使用index
?
以上假设"外部"列表的大小已经合适,但为"不存在"列表填充了null。如果不是这样,则需要检测index
何时超出当前外部列表的界限。
基本上,如果以上内容没有帮助,请提供更多信息,因为您的问题目前尚不清楚。
如果您不使用Java 7而不是
list = new ArrayList<Action>();
你可以使用
list = Lists.newArrayList();
如果你添加一个静态导入,你可以把它缩短为
list = newArrayList();