Java中如何使用builder()为请求体的列表添加第二个元素?
如何为RmaNewRequestDTO的items列表添加多个元素
Collections.singletonList() 只能生成仅包含单个元素的不可变列表,无法直接添加第二个元素。要实现多元素列表,你可以采用以下几种实用方案:
方案1:直接构建固定多元素列表(Java 8+)
用Arrays.asList()一次性传入多个Items实例,适合元素数量固定的场景:
RmaNewRequestDTO rmaNewRequest = RmaNewRequestDTO.builder() // 其他属性设置... .items(Arrays.asList( RmaNewRequestDTO.Items.builder() .orderItemId(itemOrderId.get(0)) .qtyRequested(firstProduct.getQuantity()) .resolution(RESOLUTION_ID_REFUND) .productSku(firstProduct.getSku()) .ean(firstProduct.getEan()) .build(), // 第二个元素 RmaNewRequestDTO.Items.builder() .orderItemId(itemOrderId.get(1)) .qtyRequested(secondProduct.getQuantity()) .resolution(RESOLUTION_ID_REFUND) .productSku(secondProduct.getSku()) .ean(secondProduct.getEan()) .build() )) // 其他属性设置... .build();
注意:
Arrays.asList()返回的列表是固定大小的,不能后续调用add()/remove()方法修改。
方案2:使用可变ArrayList(支持动态添加元素)
如果之后可能还要添加更多元素,直接创建ArrayList并逐个添加元素:
// 先创建可变列表 List<RmaNewRequestDTO.Items> itemsList = new ArrayList<>(); // 添加第一个元素 itemsList.add(RmaNewRequestDTO.Items.builder() .orderItemId(itemOrderId.get(0)) .qtyRequested(firstProduct.getQuantity()) .resolution(RESOLUTION_ID_REFUND) .productSku(firstProduct.getSku()) .ean(firstProduct.getEan()) .build()); // 添加第二个元素 itemsList.add(RmaNewRequestDTO.Items.builder() .orderItemId(itemOrderId.get(1)) .qtyRequested(secondProduct.getQuantity()) .resolution(RESOLUTION_ID_REFUND) .productSku(secondProduct.getSku()) .ean(secondProduct.getEan()) .build()); // 构建请求DTO RmaNewRequestDTO rmaNewRequest = RmaNewRequestDTO.builder() // 其他属性设置... .items(itemsList) // 其他属性设置... .build();
方案3:Java 9+ 简化写法
用List.of()创建不可变多元素列表,若需要可变列表则套一层ArrayList:
// 不可变列表写法 .items(List.of( RmaNewRequestDTO.Items.builder().build(), RmaNewRequestDTO.Items.builder().build() )) // 可变列表写法 .items(new ArrayList<>(List.of( RmaNewRequestDTO.Items.builder().build(), RmaNewRequestDTO.Items.builder().build() )))
内容的提问来源于stack exchange,提问作者asia92
相关产品推荐
相关产品推荐

