是否可以将参数化构造函数作为方法引用传递给map
?
我的代码中有一个看起来像这样的工具
items.stream()
.map(it -> new LightItem(item.getId(), item.getName())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我的items
列表包含几个Item
对象
Item
id, name, reference, key...
Run Code Online (Sandbox Code Playgroud)
而LightItem
只有两个领域
LightItem
id, name
Run Code Online (Sandbox Code Playgroud)
如果有可能做这样的事情会很好
items.stream().map(LightItem::new).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
这里只有一种方法可以使用构造函数,你必须在类中添加一个新的构造函数LightItem
:
public LightItem(Item item) {
this.id = item.getId();
this.name = item.getName();
}
Run Code Online (Sandbox Code Playgroud)
这将允许您使用您编写的代码:
items.stream().map(LightItem::new).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
如果你真的不想添加新的构造函数LightItem
,那就有办法:
class MyClass {
public List<LightItem> someMethod() {
return items.stream()
.map(MyClass::buildLightItem)
.collect(Collectors.toList());
}
private static LightItem buildLightItem(Item item) {
return new LightItem(item.getId(), item.getName());
}
}
Run Code Online (Sandbox Code Playgroud)