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
,但我想进行检查,并且仅当对象的 id
在 List
中时,我才想构建它的 '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();
}
我有一个 class:
@Builder
public class Foo {
private String id;
private String a;
private String b;
}
我想构建一个有一些限制的对象。我希望构建的所有对象都具有值 a
,但我想进行检查,并且仅当对象的 id
在 List
中时,我才想构建它的 '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();
}