2016-08-19 19 views
2

List<MyObject>があり、異なる要素を持つ別のList:List<OtherObject>に追加されるオブジェクトを作成するオブジェクトが必要です。あるリストから別のタイプのリストにオブジェクトを追加するラムダ式

これは私がやっている方法です、

List<MyObject> myList = returnsList(); 
List<OtherObj> emptyList = new ArrayList(); 

for(MyObject obj: myList) { 
    OtherObj oo = new OtherObj(); 
    oo.setUserName(obj.getName()); 
    oo.setUserAge(obj.getMaxAge()); 
    emptyList.add(oo); 
} 

私はまったく同じことを行うためにlamdba表現を探しています。

+3

あなたは[StackOverflowのドキュメント](http://stackoverflow.com/documentation/java/91/lambda-expressions#t=201608191539003752998)の上に、あなたが問題を見つけた場合に開始することができますそれに戻ってきてください。 –

答えて

4

あなたはそれをこのjava8スタイルを行うことができますOtherObj(String name, Integer maxAge)コンストラクタを定義した場合:

myList.stream() 
    .map(obj -> new OtherObj(obj.getName(), obj.getMaxAge())) 
    .collect(Collectors.toList()); 

をこれがOtherObjにリストmyList内のすべてのオブジェクトをマップし、これらのオブジェクトを含む新しいListにそれを収集します。

+0

ありがとうByeBYe。しかし、私がOtherObjを変更するアクセス権を持っていないとどうなりますか? \t \t \t obj2.setName(obj.getName()); \t \t obj2.setMaxAge> { \t \t \t最終OtherObj obj2が=新しいOtherObj() - '.MAP(OBJ: –

+4

あなたはこのような何かを行うことができますcollect(Collector.toList()); '(obj.getMaxAge()); \t \t \t return po; } – ByeBye

1

あなたは、MyObject属性を使用していますOtherObjectでコンストラクタを作成

public OtherObject(MyObject myObj) { 
    this.username = myObj.getName(); 
    this.userAge = myObj.getAge(); 
} 

、あなたがMyObject sからOtherObject Sを作成するために、次の手順を実行することができますすることができ、

myObjs.stream().map(OtherObject::new).collect(Collectors.toList()); 
0

私はこれはかなり古いであることがわかり役職。しかし、これはこれまでの答えに基づいてこれを取ります。私の答えの唯一の変更は.collect(ArrayList::new, ArrayList::add,ArrayList:addAll)の使用です。

サンプルコード:

List<OtherObj> emptyList = myList.stream() 
.map(obj -> { 
OtherObj oo = new OtherObj(); 
oo.setUserName(obj.getName()); 
oo.setUserAge(obj.getMaxAge()); 
return oo; }) 
.collect(ArrayList::new, ArrayList::add,ArrayList::addAll); 
関連する問題