Lombok builder,构建对象的一半,然后完成另一半的构建

Lombok builder, build half of the object, then finish building the other half

我有一个 class:

@Builder
public class Foo {
   private String id;
   private String a;
   private String b;
}

我想构建一个有一些限制的对象。我希望构建的所有对象都具有值 a,但我想进行检查,并且仅当对象的 idList 中时,我才想构建它的 'b'值。

...

for(Foo foo: foos) {
   Foo.FooBuilder builder = Foo.builder();
   builder.a("bar1");

   if(listOfIds.contains(foo.getId)) {
      builder.b("bar2");
   }
   foo = builder.build();
}
...

这是我的代码示例。所以,我想问一下这是否是使用构建器执行此操作的正确方法,或者是否有更好的方法使用构建器来执行此操作。

已更新

如果您想修改列表中的每个元素。你可以试试这个代码:

for(int i = 0; i < foos.size();i++) {
  Foo.FooBuilder builder = Foo.builder();
  builder.a("bar1");

  if(listOfIds.contains(foo.getId())) {
  builder.b("bar2");
  //TODO: copy other values from `foos.get(i)` to builder. It's your turn
  //update modified to the list at i
  foos.set(i, builder.build());   
}

}

=========================

假设 foo 是一个 Foo 对象。那么你的代码将不会被编译。你只需要像我的代码一样设置构建器的 属性 a 。在 Foo 构建器中设置所有属性后,运行 builder.build() 得到你的 foo.

Foo.FooBuilder builder = Foo.builder();

for(Foo foo: foos) {
  builder.a("bar1");

  if(listOfIds.contains(foo.getId())) {
    builder.b("bar2");
  }

  foo = builder.build();

}