3

我有这个方法

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

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

谢谢

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

4

3 回答 3

4

真的,不需要转换。

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

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方法,你会没事的,不需要转换。而且由于ArrayListis-aList并且实际上仅对其List方法有用,因此您应该没问题!

于 2012-06-06T08:32:03.953 回答
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;
}
于 2012-06-06T08:07:16.663 回答
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;
}

由于通用协方差,问题出现了。你可以在这里找到更多。

于 2012-06-06T08:07:21.060 回答