0

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

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

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。

4

2 回答 2

4

目前还不清楚Optional这里真正给你买的是什么。我认为Optional在方法之间或在存储中进行通信的价值。

此外,我认为代码并没有按照您的想法进行操作-您要的是特定索引处的列表,但是如果该索引处的值为空,则您将在末尾添加一个新列表. 听起来你想要:

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超出当前外部列表的范围。

基本上,如果上述方法没有帮助,请提供更多信息,因为您的问题目前尚不清楚。

于 2012-07-08T08:27:58.920 回答
0

如果您不在 Java 7 上而不是

list = new ArrayList<Action>();

您可以使用

list = Lists.newArrayList();

如果您为此添加静态导入,则可以将其缩短为

list = newArrayList();
于 2012-07-08T08:44:37.413 回答