在Java Stream中将POJO的列表转换为其他POJO的列表

时间:2019-06-12 09:38:23

标签: java

我有2个POJO Foo和FooDBObj,我从数据库中获取FooDBObj的列表,现在我需要创建Foo对象的列表。我需要将FooDBObj中的ID和名称分别设置为Foo的BarIdBarName中。如果它在Java Stream中会更好

我试图从下面的代码中获得Id的列表。

List<String> fooIds =FooDBObjList.stream().map(FooDBObj::getId).collect(Collectors.toList());

上面的代码只能给我Foo的ID列表,我需要在FooDBObj.id中设置所有Foo.BarId,并在FooDBObj.name中设置FooDBObj.BarName

4 个答案:

答案 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());