我不是 Java 开发人员,但我有多年的 C# 经验。我有一个List<Foo>
我需要转换为 List<Bar>
使用ModelMapper
哪里Foo
和Bar
具有本质上相同的属性。
目前我已将其写为:
@AutoWired ModelMapper modelMapper;
...
List<Bar> results = repository
.getFoos()
.stream()
.map(x -> modelMapper.map(x, Bar.class))
.collect(Collectors.toList());
这很好用。然而,我觉得 lambda 表达式可以用一个简单的方法引用来替换。如果这是 C#,我可能能够做一些类似的事情:
var results = repository.getFoos().Select(modelMapper.map<Bar>).ToList();
但是我在 Java 中找不到正确的语法。我试过这个:
.map(modelMapper::<Bar>map)
但我收到错误:
Cannot resolve method '
map
'
我不确定这是否是因为我以某种方式混淆了语法,或者这是因为 map 方法有太多重载而无法创建明确的引用。如果有帮助的话, map
的过载我尝试使用的定义为:
public <D> D map(Object source, Class<D> destinationType)
有什么方法可以在不使用 lambda 表达式的情况下实现此映射吗?
最佳答案
I am not sure if this is because I've mixed up the syntax somehow, or this is because the map method has a too many overloads to create an unambiguous reference.
你并没有搞乱语法; Java 中没有类似的东西(它通常比 C# 更冗长,流也不异常(exception)。)
只有当您要传递给方法的参数与功能接口(interface)中的参数相同且顺序相同时,才能使用方法引用(双冒号)语法。
对于map
,只有一个参数,您需要将第二个参数(即Bar.class
)传递给modelMapper.map ()
,因此不允许使用方法引用语法。使用它的唯一方法是,将 modelMapper
子类化以仅与 Bar
一起使用,从而消除对第二个的需要显式类参数。
我非常有信心您使用的方法是 Java 中最简洁的方法。
关于java - 不使用 Lambda 表达式对流进行模型映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084491/