我有一个类的可选列表,即:Optional<List<MyEntity>> opListEntity
我需要将所有映射MyEntity到MyEntityDto可选存在时。如果Optional为空,我将返回一个空的ArrayList。
方法 1(非功能性):
注意:myEntityMapper是一个映射器类的对象,它映射MyEntity到MyEntityDto.
List<MyEntityDto> res;
if (opListEntity.isPresent()) {
res = opListEntity.get().stream()
.map(myEntityMapper::entityToDto)
.collect(Collectors.toList());
} else {
res = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
这种方法很好,但IntelliJ建议将其转换为函数式表达式。我让 IntelliJ 进行转换,这就是我得到的结果:
方法2(函数表达式):
List<MyEntityDto> res = opListEntity.map(myEntities -> myEntities.stream()
.map(myEntityMapper::entityToDto)
.collect(Collectors.toList()))
.orElseGet(ArrayList::new);
Run Code Online (Sandbox Code Playgroud)
我不明白的是,在方法 2 @ 第 1 行中,为什么会有地图?
让我再解释一下。请参阅第三种方法:
方法三:
List<CustomerAddressEntity> myEntities = opListEntity
.orElseGet(ArrayList::new);
List<MyEntityDto> res = myEntities.stream()
.map(myEntityMapper::entityToDto)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
方法 3 工作正常,但如果我尝试将方法 3 转换为方法 4,则不起作用。
方法四:
List<MyEntityDto> res …Run Code Online (Sandbox Code Playgroud)