使用字段名称列表和相同模式构建 Avro 模式

Build a Avro Schema with a list of field names and the same schema

我在寻找解决问题的方法时遇到了问题。

我需要在 struct() 和 build() 方法之间调用字段方法 x 次以创建新对象。这是一个构建器模式。

Schema people = SchemaBuilder.struct()
                .field("NAME", Schema.STRING_SCHEMA)
                .field("SURNAME", Schema.STRING_SCHEMA)
                .field("CITY", Schema.STRING_SCHEMA)
                .build();

但在我的例子中,people 模式的字段从一开始就没有定义。它们需要可变。我需要这样的东西:

String[] values = {"NAME", "SURNAME", "CITY", "FIELD4", "FIELD5", .....};

Schema people = SchemaBuilder.struct()
          .xTimes.field(values[x], Schema.STRING_SCHEMA))
          .build();

我查看了 Streams 和 lambda,但从未使用过它们,我不确定它们是否可以解决这种情况。我不能打断这些方法。他们都需要排成一排。 我正在尝试做的事情是否可行?如果可行,如何实现?

谢谢

编辑: 这是我试过但没有用的方法:

public Schema buildSchema(String... fields){
  sch1 = SchemaBuilder.struct();
  for (int i = 0; i < fields.length; i++) {
    sch1 =SchemaBuilder.struct().field(fields[i], Schema.STRING_SCHEMA);
  }
  return sch1;
}

这很好用,但不符合我的需要:

public Schema buildSchema(){
  Schema sch1 = SchemaBuilder.struct()
    .field("foo", Schema.STRING_SCHEMA)
    .field("bar", Schema.STRING_SCHEMA)
    .field("duck", Schema.STRING_SCHEMA)
    .build();
  return sch1
}
String[] values = {"NAME", "SURNAME", "CITY", "FIELD4", "FIELD5", .....};

SchemaBuilder builder = SchemaBuilder.struct();
for (int i = 0; i < values.length; i++) {
    builder = builder.field(values[i], Schema.STRING_SCHEMA)
}
Schema people = builder.build();

怎么样?