将嵌套的ArrayList转换为List Java

时间:2012-06-06 08:00:21

标签: java arraylist

我有这个方法

public List<List<Stat>> ConvertReportCases (ArrayList<ArrayList<Stat>> stats)

这是一个返回类型为List<List<Stat>>的接口实现。一般来说,如何从嵌套的ArrayList转换为Java中的List?

谢谢

修改 感谢您的建议,我可以将我的参数作为List传递,但之后它将是错误的,因为调用者必须将它作为List传递,而在我的特定情况下,我可以有不同的版本(多态)来检查这个问题。

3 个答案:

答案 0 :(得分:3)

真的,不需要转换。

如果您无法触摸列表的声明,则应将方法签名更改为此。它使用wildcards

public List<? extends List<Stat>> convertReportCases(List<? extends List<Stat>> stats);

但是,最干净的方法是将方法签名更改为

public List<List<Stat>> convertReportCases(List<List<Stat>> stats);

并将列表声明为

List<List<Stat>> list = new ArrayList<List<Stat>>();
for (List<Stat> sublist : list) {
    sublist = new ArrayList<Stat>();
}

如果你使用List方法,你会没事的,不需要转换。由于ArrayList是一个List并且实际上只对其List方法有用,所以你应该没问题!

答案 1 :(得分:0)

public List<List<Stat>> ConvertReportCases (ArrayList<ArrayList<Stat>> stats) {
   List<List<Stat>> newList = new ArrayList<List<Stat>>(stats.size());
   for (ArrayList<Stat> arrayList : stats) {
      newList.add(arrayList);
   }
   return newList;
}

答案 2 :(得分:0)

你必须遍历第一个列表并转换每个列表。类似的东西:

public List<List<Stat>> ConvertReportCases (ArrayList<ArrayList<Stat>> stats) {
    List<List<Stat>> list = new ArrayList<List<Stat>>();
    for (List<Stat> l : stats) {
        list.add(l);
    }
    return list;
}

由于通用协方差而出现问题。您可以找到更多here