gpt4 book ai didi

java - 创建新对象来替换不可变对象(immutable对象)中的值

转载 作者:行者123 更新时间:2023-12-02 18:58:11 25 4
gpt4 key购买 nike

我有如下不可变对象(immutable对象)。

@Getter 
@Builder
class MainDetail {
// 5 other String fields
private Data data;
}

@Getter
@Builder
class ImageUrl {
private final String dataOne; // looking to change these 2 values
private final String dataTwo; // if rest call returns null for these.
}

填充这些的信息是从休息调用中获取的,工作正常,如下。

List<MainDetail> featureBenefits = // value from a rest response 

如果每个 MainDetail 对象的 dataOne 和 dataTwo 值都为 null,我希望将其切换出去。
我不能只使用 set 方法来执行此操作,因为它是不可变的。

我最终采用了以下详细的方式来执行此操作,其中我需要进行多种检查以交换值。
我不能一次只检查一个,然后切换 cos 对象变得不可变。如果此后第二个也为空,则无法添加另一个。

有没有办法更优雅地做到这一点,可能通过流?感谢任何帮助。谢谢。

List<MainDetail> mainDetails = new ArrayList<>();
for (MainDetail mainDetail : featureBenefits) {
if (mainDetail.getImageUrl().getDataOne() == null && mainDetail.getImageUrl().getdataTwo() == null) {
ImageUrl imageUrl = ImageUrl.builder()
.dataOne("default1")
.dataTwo("default12")
.build();
MainDetail detail = MainDetail.builder()
.imageUrl(imageUrl)
.build();
mainDetails.add(detail);
}
else if (mainDetail.getImageUrl().getdataOne() == null) {
ImageUrl imageUrl = ImageUrl.builder()
.dataOne("default1")
.build();
MainDetail detail = MainDetail.builder()
.imageUrl(imageUrl)
.build();
mainDetails.add(detail);
}
else if (mainDetail.getImageUrl().getDataTwo() == null) {
ImageUrl imageUrl = ImageUrl.builder()
.dataTwo("default2")
.build();
MainDetail detail = MainDetail.builder()
.imageUrl(imageUrl)
.build();
mainDetails.add(detail);
}
}

最佳答案

这个怎么样:

List<MainDetail> featureBenefits = Collections.emptyList();
List<MainDetail> mainDetails = new ArrayList<>();

for (MainDetail mainDetail : featureBenefits) {
ImageUrl imageUrl = mainDetail.getImageUrl();

mainDetails.add(MainDetail.builder()
.imageUrl(ImageUrl.builder()
.dataOne(Optional.ofNullable(imageUrl.getDataOne()).orElse("default1"))
.dataTwo(Optional.ofNullable(imageUrl.getDataTwo()).orElse("default2"))
.build())
.build());
}

关于java - 创建新对象来替换不可变对象(immutable对象)中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65928195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com