Apache spark 如何使用java lambda表达式foreach添加到现有列表

Apache spark 如何使用java lambda表达式foreach添加到现有列表,apache-spark,lambda,java-8,Apache Spark,Lambda,Java 8,我想将以下功能实现为Java8 Lambda private StructType getSchema(Dataset<Row> df, List<String> cols){ StructType schema = df.schema(); for (String col: cols){ schema.add(col, "int", true); } return schema;

我想将以下功能实现为Java8 Lambda

private StructType getSchema(Dataset<Row> df, List<String> cols){
        StructType schema = df.schema();
        for (String col: cols){
            schema.add(col, "int", true);
        }
        return schema;
    }

如何解决此问题?

无论出于何种原因分配该架构,请不要:

private StructType getSchema(Dataset<Row> df, List<String> cols){
    StructType schema = df.schema();
    cols.forEach(col -> schema.add(col, "int", true));
    return schema;
}

Final或effectivefinal意味着,如果一个变量在lambda表达式之外声明,就像您的模式一样,那么您可以读取它,或者调用它的方法,但不能赋值给它


for的javadoc表明StructType是一个不可变的类,add方法返回一个新实例,因此这里使用的forEach可能是错误的迭代类型。事实上,您的原始for in是一个更好的选择。

为什么需要指定?schema=schema.addcol,int,trueoh是的,你是对的,我可以直接添加并返回模式。谢谢你的快速回复
variable used in lambda expression should be final or effectively final.
private StructType getSchema(Dataset<Row> df, List<String> cols){
    StructType schema = df.schema();
    cols.forEach(col -> schema.add(col, "int", true));
    return schema;
}