2010-10-20 97 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