我有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的ID列表,我需要在FooDBObj.id
中设置所有Foo.BarId
,并在FooDBObj.name
中设置FooDBObj.BarName
>
答案 0 :(得分:3)
我想您可以直接直接编写映射逻辑:
Stream<Foo> = fooDBObjList.stream()
.map(db -> {
Foo foo = new Foo();
foo.setBarId(db.Id);
foo.setBarName(db.name);
return foo;
});
如果Foo
已经具有适当的构造函数(或工厂方法,例如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
答案 1 :(得分:0)
fooDBObjList.stream()
.map(Foo:map)
.collect(Collectors.toList());
在Foo类中:
Foo map(FooDBObj dbObj) {
return Foo.builder
.id(dbObj.getId())
.name(dbObj.getName())
.build();
}
答案 2 :(得分:0)
或者您也可以像这样
fooDBObjList.stream().forEach(x -> {
Foo foo = new Foo ();
foo.setId(x.getid());
foo.setName(x.getname());
foooList.add(foo);
});
答案 3 :(得分:-1)
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());