2016-04-26 30 views
3

mapへのメソッド参照としてパラメータ化されたコンストラクタを渡すことはできますか?メソッド参照としてパラメータ化されたコンストラクタを渡す

私はこの

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

マイitemsリストのように見える私のコード内施設constainsいくつかItemオブジェクトLightItemに対し

Item 
    id, name, reference, key... 

は、2つのフィールドのみ

LightItem 
    id, name 
を持っているを持っています

それはポーだったらいいよここでは、コンストラクタを使用する唯一の方法があります。この

items.stream().map(LightItem::new).collect(Collectors.toList()) 

答えて

5

ような何かをしssible、あなたは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()); 
    } 

} 
+1

@JoachimSauerそうです、それを修正しました。ありがとう:) –

関連する問題