传递参数化构造函数作为方法引用

lap*_*ots 3 java java-8

是否可以将参数化构造函数作为方法引用传递给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)

Mac*_*ski 5

这里只有一种方法可以使用构造函数,你必须在类中添加一个新的构造函数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)