2014-10-06 51 views
0

我有一個對象,其中包含一個動態分配的2D ArrayList摺疊2D ArrayList

它有一個getter:ArrayList<Integer> getList()

我想一個函數來摺疊2D ArrayList成一維ArrayList。確實有Java的這種事還是我堅持做這樣的:

public ArrayList<Integer> getList(){ 
    ArrayList<Integer> result = new ArrayList<Integer>(); 

    for(int i = 0; i < list_.size(); i++){ 
     for(int j = 0; j < list_.get(i).size(); j++){ 
      result.add(list_.get(i).get(j)); 
     } 
    } 
    return result; 
} 
+1

'ArrayList ',而不是'ArrayList ',你可以使用'addAll'而不是''''來代替'循環'。 – rgettman 2014-10-06 18:44:55

+0

@rgettman謝謝,修正了太多的C++。 – 2014-10-06 18:52:09

回答

1

沒有Java 8,你必須使用循環。使用addAll(..)確實擺脫其中之一。

public ArrayList<Integer> getList(){ 
    ArrayList<Integer> result = new ArrayList<Integer>(); 

    for(ArrayList<Integer> i : list_){ 
     result.addAll(i); 
    } 
    return result; 
} 

此外,通用類型如ArrayList必須是對象類型,因此Integer,而不是int。

+0

@JBNizet我已經接受了這個解決方案,但是如果我使用Java 8,那麼您的偏好是我的偏好。 – 2014-10-08 12:54:38

2

與Java 8:

return _list.stream() 
      .flatMap(List::stream) 
      .collect(Collectors.toList()); 

的Java 8之前,需要一個循環。