是否可以将参数化构造函数作为方法引用传递给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)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |