2010-10-20 99 views
2

我环顾四周,但我似乎无法找到,它下面的API调用:我需要合并所有的ArrayList在一个ArrayList,形成一个ArrayList的所有来自所有子阵列的元素,如果有意义的话。的Java的ArrayList:内的ArrayList合并的ArrayList创建一个ArrayList的

下面是一个例子:

{ “这”, “A”,{ “小”, “世界 ”之后“},{” 所有 “}}变为{” 这”, “一”, “小”,“世界”,“后”,“所有”}

+1

听起来像功课递归。没有电话是为你做的,但是它的编码很简单。 – 2010-10-20 07:58:37

回答

3
public List<?> flatten(List<?> input) { 
    List<Object> result = new ArrayList<Object>(); 

    for (Object o: input) { 
     if (o instanceof List<?>) { 
      result.addAll(flatten((List<?>) o)); 
     } else { 
      result.add(o); 
     } 
    } 

    return result; 
} 
+0

你可以举一个例子来说明如何正确地调用这个方法?我没有用过?与Java泛型之前,我很确定(尽管谷歌搜索)我还没有得到它的权利。 – 2013-01-22 01:03:38

+1

@Nick:你可以在那里传递任何列表,但你回来了“未知”列表。这种方法不能承诺更多。如果您确信输入列表中的元素是T或列表,然后你可以施放结果列表回(名单)(你会得到编译器警告有关)。否则,列表与对象列表类似,但只能从中获取元素。如果将方法返回类型更改为列表,它仍然可以正常工作,并且它将允许您修改结果列表而无需更多投射。 – 2013-01-22 09:54:32

+0

现在一切都很有意义,谢谢彼得! – 2013-01-22 20:49:51

2

要建立在Thilo's answer顶部,并避免再次实现自己的考虑Groovy的Collection.flatten()

+2

Guava或Commons Collections中是否也有一个(对于不够常规的人)? – Thilo 2010-10-20 08:17:02

+2

@Thilo:猜猜看,我其实也看了一眼,你看了我的脑海!令人惊讶的是,我找不到任何东西,尽管我会希望番石榴在某处。 Apache Commons Collections有FlatMap或其他东西,但没有我知道的“flattenizer”。 – haylem 2010-10-20 08:19:01