の新しいのArrayListを作成するより良い方法はnew StructField
でStructType
コンストラクタを呼び出しているので、新しいStructTypeを作成します。
def add(name: String, dataType: DataType): StructType = {
StructType(fields :+ new StructField(name, dataType, nullable = true, Metadata.empty))
}
以下のサンプルプログラムを使用して確認できます。
public class QuickTest {
public static void main(String[] args) {
SparkSession sparkSession = SparkSession
.builder()
.appName("QuickTest")
.master("local[*]")
.getOrCreate();
//StructType
StructType st1 = new StructType().add("name", DataTypes.StringType);
System.out.println("hashCode "+st1.hashCode());
System.out.println("structType "+st1.toString());
//add
st1.add("age", DataTypes.IntegerType);
System.out.println("hashCode "+st1.hashCode());
System.out.println("structType "+st1.toString());
//add and assign
StructType st2 = st1.add("age", DataTypes.IntegerType);
System.out.println("hashCode "+st2.hashCode());
System.out.println("structType "+st2.toString());
//constructor
StructType st3 = new StructType(new StructField[] {new StructField("name", DataTypes.StringType, true, null), new StructField("age", DataTypes.IntegerType, true, null)});
System.out.println("hashCode "+st3.hashCode());
System.out.println("structType "+st3.toString());
}
}
彼らはそれが不変StructTypeを維持するために、新しいオブジェクト –
を作成しなくても、それを実装するために非常に簡単ですようにそれはそうするので、新しいオブジェクトを毎回作成することを決めた私はなぜだろうか。 – abaghel
ああ、私は参照してください。関数型プログラミングに準拠するには? –