是否可以将参数化的构造方法作为对map的方法引用?

我的代码中有一个设施看起来像这样

items.stream()
        .map(it -> new LightItem(item.getId(), item.getName())
        .collect(Collectors.toList());

我的items列表包含几个Item对象
Item
   id, name, reference, key...

LightItem只有两个字段
LightItem
    id, name

如果可以做这样的事情会很好
items.stream().map(LightItem::new).collect(Collectors.toList())

最佳答案

这里只有一种使用构造函数的方法,您必须向LightItem类添加一个新的构造函数:

public LightItem(Item item) {
    this.id = item.getId();
    this.name = item.getName();
}

这将允许您使用编写的代码:
items.stream().map(LightItem::new).collect(Collectors.toList())

如果您真的不想向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());
    }

}

10-04 14:37