如果List <list <t>&gt;中不存在新列表,那么如何更好地测试和创建新列表?结构</列表<T>

时间:2012-07-08 08:21:14

标签: java list guava

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

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

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。

2 个答案:

答案 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();
相关问题