如果新列表不存在,如何更好地测试和创建新列表?
我只找到了这个解决方案:
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());
}
也许我应该改变存储结构? (添加顺序。能够添加列表的开头和结尾。在两个列表中都很重要)。 如果需要,可以使用Google Guava。
答案 0 :(得分:4)
目前还不清楚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
?
以上假设“外部”列表已经是正确的大小,但填充了“缺席”列表的空值。如果情况并非如此,则需要检测index
何时超出当前外部列表的范围。
基本上,如果以上情况没有帮助,请提供更多信息,因为您的问题目前尚不清楚。
答案 1 :(得分:0)
如果您不使用Java 7而不是
list = new ArrayList<Action>();
你可以使用
list = Lists.newArrayList();
如果您向其添加静态导入,则可以将其缩短为
list = newArrayList();