将 ArrayList<ArrayList<Integer>> 转换为 List<List

我在工作中做了一些编码挑战,我们需要执行相当多的业务逻辑,从而生成一个整数列表列表。我在 ArrayList of Integers 的 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;


aluckdog
浏览 399回答 3
3回答

慕码人2483693

您应该针对接口工作并删除具体的实现细节。在您的示例中,请改用对的引用List<List<Integer>,因为您可以向其添加任何List实现,包括您的ArrayList.public List<List<Integer>> returnList(){&nbsp; &nbsp; List<List<Integer>> currentList = new ArrayList<>();&nbsp; &nbsp; List<Integer> innerList = new ArrayList<>();&nbsp; &nbsp; innerList.add(123);&nbsp; &nbsp; currentList.add(innerList);&nbsp; &nbsp; return currentList;}如果您需要返回一个 new List,只需将其包装成另一个:return new ArrayList<>(currentList);或者,使返回的List不可修改:return Collections.unmodifiableList(currentList);编辑如果你真的坚持使用,ArrayList你可以将它转换为Listwithreturn (List) currentArrayList;此强制转换会引发编译器警告,但您可以忽略它,@SuppressWarnings("unchecked")因为您知道返回了正确的类型。

jeck猫

只需像这样更改声明类型,因为ArrayListextends from AbstractListwhich implements List:List<List<Integer>> returnList(){&nbsp; &nbsp; List<List<Integer>> currentArrayList = new ArrayList<>();&nbsp; &nbsp; List<Integer> innerList = new ArrayList<>();&nbsp; &nbsp; innerList.add(new Integer(123));&nbsp; &nbsp; currentArrayList.add(innerList);&nbsp; &nbsp; return currentArrayList;}

白板的微信

正如其他人提到的,编程到接口。您的单线解决方案是:List<List<Integer>>&nbsp;newList&nbsp;=&nbsp;Collections.unmodifiableList(currentArrayList);但这有一个明显的缺点:你不能向它添加新元素。如果你考虑一下,这是有道理的。虽然你可以添加LinkedList<Integer>到List<List<Integer>>,你不能添加LinkedList<Integer>到List<ArrayList<Integer>>。如果您需要修改列表的能力,那么您可以创建一个新列表:List<List<Integer>>&nbsp;newList&nbsp;=&nbsp;new&nbsp;ArrayList<>(currentArrayList);这意味着复制外部列表。最后一个解决方案您不应该采用,并且正在使用原始类型:List<List<Integer>>&nbsp;newList&nbsp;=&nbsp;(List)&nbsp;currentArrayList;虽然这会编译,但如果有人将例如 a 添加LinkedList<Integer>到该列表中,它可能会在稍后中断,而您仍然希望该列表中的每个元素都是一个ArrayList<Integer>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java