如果列表<列表>结构中不存在新列表,如何更好地测试和创建新列表<T>?



如果不存在新列表,如何更好地测试和创建新列表?

我只找到了这个解决方案:

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();

最新更新