我有这个方法
public List<List<Stat>> ConvertReportCases (ArrayList<ArrayList<Stat>> stats)
这是一个返回类型为List<List<Stat>>
的接口实现。一般来说,如何从嵌套的ArrayList转换为Java中的List?
谢谢
修改 感谢您的建议,我可以将我的参数作为List传递,但之后它将是错误的,因为调用者必须将它作为List传递,而在我的特定情况下,我可以有不同的版本(多态)来检查这个问题。
答案 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。