【问题标题】:Collapse 2D ArrayList折叠 2D ArrayList
【发布时间】:2014-10-06 18:43:28
【问题描述】:

我有一个包含动态分配的 2D ArrayList 的对象。

它有一个吸气剂:ArrayList<Integer> getList()

我想要一个将二维 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;
}

【问题讨论】:

  • ArrayList&lt;Integer&gt;,而不是 ArrayList&lt;int&gt;,您可以使用 addAll 代替 j for 循环。
  • @rgettman 谢谢,修复了...太多的 C++。

标签: java arraylist multidimensional-array dynamic-arrays


【解决方案1】:

使用 Java 8:

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

在 Java 8 之前,需要循环。

【讨论】:

    【解决方案2】:

    没有 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。

    【讨论】:

    • @JBNizet 我已经接受了这个解决方案,但如果我使用的是 Java 8,我会更喜欢你的解决方案。
    猜你喜欢
    • 2021-06-27
    • 2014-05-22
    • 2016-10-26
    • 1970-01-01
    • 2010-10-15
    • 2017-03-10
    • 2011-07-01
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多