java - 迭代列表上编译失败

标签 java list collections

我有一个这样的列表 - [[1, 2, 3], [4, 5, 6, [1, 2, 3]]]

下面是我的代码-

    List<Object> inner1=new ArrayList<Object>();
    inner1.add(1);
    inner1.add(2);
    inner1.add(3);

    List<Object> inner2=new ArrayList<Object>();
    inner2.add(4);
    inner2.add(5);
    inner2.add(6);
    inner2.add(inner1);

    List<Object> outer=new ArrayList<Object>();
    outer.add(inner1);
    outer.add(inner2);

    System.out.println(outer);


    for(List<Object> list:(List<List<Object>>)outer){   //compile fail
        for(Object innerData:(List<Object>)list){
             if (innerData instanceof List) {
                for(Integer data: (List<Integer>)innerData){
                    System.out.println(data);
                }

            }else{
                System.out.println(innerData);
            }

        }
    }

为什么这个编译在迭代外部列表时失败。

我知道outer中的所有对象都是List<Object>所以这是一个List<List<Object>>

List<List<Object>> 中类型转换外部结果编译失败。

如果这不是想要的结果,则应该是 ClassCastException而不是编译失败?

最佳答案

编译错误,因为您的外部类型是 List<Object>无法转换为 List<List<Object>> .

您的代码应该是:

for (Object list : outer) {  
    if (list instanceof List) {
        for (Object innerData : (List<Object>) list) {
            if (innerData instanceof List) {
                for (Integer data : (List<Integer>) innerData) {
                    System.out.println(data);
                }

            } else {
                System.out.println(innerData);
            }

        }
    }
}   

关于java - 迭代列表上编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31067165/

相关文章:

r - 从 R 中的四个整数列表生成所有可能的排列

collections - java Collections 常见方法面试题

java - 防止 Spring Boot 缓存文件

java - jacob.dll 已经加载到另一个类加载器中

java - Reader 和 InputStream 有什么区别?

java - 在 Java 中比较 "Queue"对象

java - Scala - 如何重构方法以使用reduceLeft而不是迭代?

java - 在 Android 10 上阅读 PDF

C# - 如何在列表中添加所有 system.drawing.color 项目?

algorithm - 如何用基本的列表映射实现MapThread?