Строитель Ломбок, строит половину объекта, затем строит вторую половину sh - PullRequest
1 голос
/ 11 февраля 2020

У меня есть класс:

@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();
}
...

Это пример моего кода. Итак, я спрашиваю, является ли это правильным способом сделать это с помощью компоновщика, или есть лучший способ сделать это с помощью компоновщика.

1 Ответ

3 голосов
/ 11 февраля 2020

ОБНОВЛЕНО

В случае, если вы хотите изменить каждый элемент в списке. Вы можете попробовать этот код:

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();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...