我在工作中遇到了一些编码挑战,我们需要执行相当多的业务逻辑,从而生成一个整数列表列表。我在整数 ArrayList 的 ArrayList 中有所需的信息,但永远无法弄清楚如何将其转换为正确的返回类型。
在键入时使用 T 或 Object 也有很多变体。我搜索过堆栈溢出,有很多类似的问题,但没有一个给我直接的答案;他们更加概念化。
需要回答的问题: 输出必须是
List<List<Integer>> (not negotiable).
鉴于现有:
ArrayList<ArrayList<Integer>> **currentArrayList** HOW do you convert that to a List<List<Integer>>.
我不再需要代码,但是能够完成所有逻辑但不能完成简单的类型转换会让我发疯。
List<List<Integer>> returnList(){
ArrayList<ArrayList<Integer>> currentArrayList = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> innerList = new ArrayList<Integer>();
innerList.add(new Integer(123));
currentArrayList.add(innerList);
List<List<Integer>> newList = ????
// ??Logic to copy over currentArrayList into newList???
return newList;
}
请您参考如下方法:
您应该针对接口(interface)进行工作并删除确切的实现细节。在您的示例中,使用对 List<List<Integer>
的引用相反,因为您可以添加任何 List
实现它,包括您的 ArrayList
.
public List<List<Integer>> returnList(){
List<List<Integer>> currentList = new ArrayList<>();
List<Integer> innerList = new ArrayList<>();
innerList.add(123);
currentList.add(innerList);
return currentList;
}
如果您需要返回新的List
,只需将其包装到另一个中即可:
return new ArrayList<>(currentList);
或者,返回 List
不可修改:
return Collections.unmodifiableList(currentList);
编辑
如果你真的被 ArrayList
困住了您可以将其转换为 List
与
return (List) currentArrayList;
此转换会引发编译器警告,但您可以使用 @SuppressWarnings("unchecked")
忽略它。因为您知道返回了正确的类型。