[英]Converting a List of POJO into List of some other POJO in Java Stream
我有2個POJO Foo和FooDBObj
,我從數據庫中獲取了FooDBObj
列表,現在我需要創建Foo
對象的列表。 我需要將FooDBObj
ID和名稱分別設置為Foo的BarId
和BarName
。 如果它在Java Stream中會更好
我試圖從下面的代碼中獲取Id的列表。
List<String> fooIds =FooDBObjList.stream().map(FooDBObj::getId).collect(Collectors.toList());
上面的代碼可以給我的只有編號列表Foo的我需要所有的FooDBObj.id
在設置Foo.BarId
和FooDBObj.name
中要設置FooDBObj.BarName
我想您可以直接直接編寫映射邏輯:
Stream<Foo> = fooDBObjList.stream()
.map(db -> {
Foo foo = new Foo();
foo.setBarId(db.Id);
foo.setBarName(db.name);
return foo;
});
如果Foo
已經具有合適的構造函數(或Foo.from(FooDbObj)
之類的工廠方法Foo.from(FooDbObj)
則可以通過方法引用來完成:
Stream<Foo> = fooDbObjList.stream().map(Foo::from); // Factory method
….map(Foo::new) // if Foo(FooDbObj) constructor
….map(db -> new Foo(db.Id, db.name)) // if Foo(barId, barName) constructor
fooDBObjList.stream()
.map(Foo:map)
.collect(Collectors.toList());
在Foo類中:
Foo map(FooDBObj dbObj) {
return Foo.builder
.id(dbObj.getId())
.name(dbObj.getName())
.build();
}
或者你也可以這樣
fooDBObjList.stream().forEach(x -> {
Foo foo = new Foo ();
foo.setId(x.getid());
foo.setName(x.getname());
foooList.add(foo);
});
One can use below snippet:
List foo = FooDBObjList.stream().map(fooDBObj -> { Foo f = new Foo();
f.setBarName(fooDBObj.getName());
f.setBarId(fooDBObj.getId());
return f;}).collect(Collectors.toList());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.