Создать список с использованием шаблона Builder в Java

У меня есть класс, который принимает строку и объект списка. Я могу создать объект списка отдельно с помощью построителя и передать его другому построителю для создания объекта. Но это не выглядит хорошим способом. Есть ли какой-либо способ объединить эти 2 строителя в одного строителя.

@Data
@Builder
public class CustomerRequest{
private String cutspec;
private List<Customer> listOfcustomer;
}

Текущая реализация

Customer customer = Customer.builder().conditionType("valueCondition").key("customerNo")
            .operator(" = ").value(customerId).build();
    
    List<Customer> listOfcustomer = new ArrayList<>();
    listOfcustomer.add(customer);

    return CustomerRequest.builder().name("John").simplecustomer(listOfcustomer).build();

Можете ли вы показать, какое использование вы ищете? Как вы хотите использовать «объединенный» строитель?

Sweeper 01.08.2023 06:20

Как билдер, сгенерированный Lombok, оказывается там с именем метода simplecustomer?

tgdavies 01.08.2023 06:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете создать собственный построитель для класса CustomerRequest. Затем вы можете напрямую построить объект Customer внутри построителя CustomerRequest, и нет необходимости создавать отдельный список, а затем передавать его построителю CustomerRequest.

@Data
@Builder
public class CustomerRequest {
    private String cutspec;
    private List<Customer> listOfcustomer;

    public static class CustomerRequestBuilder {
        private List<Customer> listOfcustomer = new ArrayList<>();

        public CustomerRequestBuilder customer(Customer customer) {
            this.listOfcustomer.add(customer);
            return this;
        }
    }
}

После этого вы можете напрямую создать объект CustomerRequest со связанными с ним объектами Customer с помощью пользовательского компоновщика:

Customer customer = Customer.builder()
        .conditionType("valueCondition")
        .key("customerNo")
        .operator(" = ")
        .value(customerId)
        .build();
return CustomerRequest.builder()
        .cutspec("someCutSpec")
        .customer(customer) 
        .build();
Ответ принят как подходящий

Используя метод List.of() в Java 9, вы можете сделать:

return CustomerRequest.builder()
    .name("John")
    .simplecustomer(List.of(
        Customer.builder().conditionType("valueCondition").key("customerNo")
            .operator(" = ").value(customerId).build()
    ))
    .build();

Просто имейте в виду, что полученный список неизменен.

Другие вопросы по теме