gpt4 book ai didi

java - 在 Java 中将一个 Optional> 转换为另一个 Optional>

转载 作者:行者123 更新时间:2023-12-04 00:51:05 26 4
gpt4 key购买 nike

例如,如何将可选列表对象从一种类型转换为另一种类型

Optional<List<ProductMultipleOptionViewModel>> productOptionType1 // One type

Optional<List<ProductMultipleOption>> productOptionType2 // Other type

ProductMultipleOptionViewModel

类型 1

@Introspected
public record ProductMultipleOptionViewModel(
ProductOptionViewModel productOption,
String optionName) {
}

类型 2

 @Introspected
public record ProductMultipleOption(
ProductOptionViewModel productOption,
String optionName) {
}

我想从 Optional<List<ProductMultipleOption>> 转换给其他Optional<List<ProductMultipleOptionViewModel>> .我试过下面的代码

Optional<List<ProductMultipleOptionViewModel>> conveertItem = Optional.ofNullable(product.getProductMultipleOption())
.orElseGet(null)
.stream()
.map(option -> {
return new ProductMultipleOptionViewModel(
ProductOptionViewModel.valueOf(//Access the option value//), //access the option value//
);
})
.collect(Collectors.toList());

使用上面的代码,我无法访问 map 方法中的选项值

如果 product.getProductMultipleOption()为 null 返回 null 或空列表。

最佳答案

您应该很少同时使用 OptionalCollection(如 ListSet)。相反,您应该使用空的 Collection。还要记住 Optionals should not really be used for conditional logic, but rather as return values .

使用普通的 if 语句:

List<ProductMultipleOptionViewModel> conveertItem = new ArrayList<>(); 
if (product.getProductMultipleOption() != null) {
for(ProductMultipleOption option : product.getProductMultipleOption()) {
conveertItem.add(new ProductMultipleOptionViewModel(
ProductOptionViewModel.valueOf(option)
));
}
}

另一种变体:

List<ProductMultipleOption> list = product.getProductMultipleOption();
if (list == null) {
list = Collections.emptyList();
}
List<ProductMultipleOptionViewModel> conveertItem = new ArrayList<>();
for(ProductMultipleOption option : list) {
conveertItem.add(new ProductMultipleOptionViewModel(
ProductOptionViewModel.valueOf(option)
));
}

或者如果你真的想使用 Streams 和 Optionals(口味问题):

List<ProductMultipleOptionViewModel> conveertItem = Optional.ofNullable(product.getProductMultipleOption())
.map(List::stream)
.orElseGet(Stream::empty)
.map(option -> new ProductMultipleOptionViewModel(
ProductOptionViewModel.valueOf(option)
))
.collect(Collectors.toList());

现在有很多代码用于简单地转换 nullable List。那么为什么不首先返回一个空的 List 呢?将 product.getProductMultipleOption() 更改为如下内容:

public List<ProductMultipleOption> getProductMultipleOption() {
List<ProductMultipleOption> list = ...; // your current logic for getting the list
return list == null ? Collections.emptyList() : list;
}

这样您就不必担心空检查。因为无论您在哪里调用 getProductMultipleOption(),您都只是在处理一个空集合。

关于java - 在 Java 中将一个 Optional<List<Object>> 转换为另一个 Optional<List<Object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66597274/

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