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

时间:2016-04-26 11:41:26

标签: java java-8

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

1 个答案:

答案 0 :(得分:5)

这里只有一种方法可以使用构造函数,你必须在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());
    }

}