在Java中使用构建器模式创建列表

问题描述 投票:0回答:2

我有一个接受字符串和 List 对象的类。我可以使用构建器单独创建一个 List 对象,并将其传递给另一个构建器来创建对象。但这看起来并不是一个好方法。他们有什么方法可以将这两个构建器合并到一个构建器中吗?

@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();
java java-8 builder
2个回答
0
投票

您可以为 CustomerRequest 类创建自定义构建器。然后,您可以直接在 CustomerRequest 构建器中构建 Customer 对象,无需创建单独的列表,然后将其传递给 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();

0
投票

使用 Java 9 的 List.of() 方法你可以这样做:

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

请注意,结果列表是不可变的。

© www.soinside.com 2019 - 2024. All rights reserved.