【问题标题】:java convert list of object array to a POJOjava将对象数组列表转换为POJO
【发布时间】:2014-12-20 18:52:08
【问题描述】:

如何转换

List<Object[]> to List<POJOObject>

这里是例子

//So, lets us say I have Object[], I want to have a class as follows:

class POJOObject {
    //maps to Object[0]
    private Integer x;
    //maps to Object[1]
    private Long y;
    //maps to Object[2]
    private String y;
}

有什么简单的方法可以做到吗?什么库在这里有用?

谢谢。

【问题讨论】:

  • 如果使用 Java 8,那么只需使用 Stream。否则写一个循环。你到底有什么问题?
  • 你可能会使用推土机:dozer.sourceforge.net

标签: java mapping jackson pojo


【解决方案1】:

也许http://dozer.sourceforge.net 可以帮助你。它是一个可以通过xml配置的映射库。

我很快就用这个试了一下:

public class Main {
  public static void main(String[] args) {
    Object[] obj = new Object[3];
    obj[0] = new Integer(10);
    obj[1] = new Long(2346246234634L);
    obj[2] = "Hello";

    Collections.singletonList("mapping.xml");
    DozerBeanMapper mapper = new DozerBeanMapper(Collections.singletonList("mapping.xml"));
    PojoObject pojo = mapper.map(obj, PojoObject.class);
    System.out.println(pojo);
  }

  public static class PojoObject {
    private Integer integer;
    private Long longg;
    private String string;

    public PojoObject() {}

    public Integer getInteger() {
      return integer;
    }

    public void setInteger(Integer integer) {
      this.integer = integer;
    }

    public Long getLongg() {
      return longg;
    }

    public void setLongg(Long longg) {
      this.longg = longg;
    }

    public String getString() {
      return string;
    }

    public void setString(String string) {
      this.string = string;
    }

    @Override
    public String toString() {
      return String.format("Pojo content: %d, %d, %s", integer, longg, string);
    }
  }
}

我的 mappings.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net
      http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <mapping>
        <class-a>java.lang.Object[]</class-a>
    <class-b>ch.romix.dozertest.Main.PojoObject</class-b>
        <field>
        <a>this[0]</a>
        <b>Integer</b>
    </field>
    <field>
        <a>this[1]</a>
        <b>Longg</b>
    </field>
    <field>
        <a>this[2]</a>
        <b>String</b>
    </field>
    </mapping>
</mappings>

不幸的是,它仅将 10 映射到所有三个 PojoObject 属性。也许您可以看到错误并将 sn-p 用于您的代码。也许这是 Dozer 中的一个错误...我找不到任何使用 this[0] 的示例。

【讨论】:

  • 怎么样?究竟是哪种方法?
  • @riship89 阅读此简短教程:dozer.sourceforge.net/documentation/usage.html
  • 我得到所有字段的相同值,知道如何解决它。字段也有 parameter_address 作为值。 "x": "[Ljava.lang.Object;@2d716a1c", "y": "[Ljava.lang.Object;@2d716a1c",
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
相关资源
最近更新 更多