Java以表格格式转换对象

时间:2014-03-27 09:55:31

标签: java

我实现了一个从json响应中读取数据的api,并将生成的对象写入csv。

有没有办法将java中的对象转换为表格式(行列)?

E.g。假设我有这些对象:

public class Test1 {
    private int a;
    private String b;
    private Test2 c;
    private List<String> d;
    private List<Test2> e;

    // getters-setters ...
}


public class Test2 {
    private int x;
    private String y;
    private List<String> z;

    // getters-setters ...
}

假设我有一个具有以下值的实例

Test1 c1 = new Test1();
c1.setA(11);
c1.setB("12");
c1.setC(new Test2(21, "21", Arrays.asList(new String[] {"211", "212"}) ));
c1.setD(Arrays.asList(new String[] {"111", "112"}));
c1.setE(Arrays.asList(new Test2[] {
    new Test2(31, "32"),
    new Test2(41, "42")
}));

我希望看到像List<Map<String, Object>>或其他一些对象返回的内容:

    a     b     c.x     c.y      c.z     d     e.x     e.y
    ----  ----  ------  -------  ------  ----  ------  ------
    11    12    21      21       211     111   31      32
    11    12    21      21       211     111   41      42
    11    12    21      21       211     112   31      32
    11    12    21      21       211     112   41      42
    11    12    21      21       212     111   31      32
    11    12    21      21       212     111   41      42
    11    12    21      21       212     112   31      32
    11    12    21      21       212     112   41      42

我已经实现了一些东西,以便使用反射来实现这个结果,但我的解决方案对于较大的对象来说太慢了。

我正在考虑使用内存数据库,以便将对象转换为数据库表,然后选择结果,例如MongoDB或ObjectDB,但我认为它有点过分,可能比我的方法慢。另外,这两个在内存数据库中不支持,我不想使用另一个磁盘数据库,因为我已经在使用带有hibernate的MySQL。 Usint ramdisk不是一个选项,因为我的服务器只有有限的RAM。是否有内存oodbms可以做到这一点?

如果已经有一个可以将任何对象转换为行列格式的库,我会优先考虑算法,或者甚至更好?类似jackson或jaxb的数据,可以将数据转换为其他格式的数据。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

最后,在对我家里任何可能出现的东西敲打一周后,我找到了解决办法。

我在GitHub上分享了代码,这样如果有人再次遇到这个问题,他可以避免一些迁移:)

你可以从这里获得代码:   https://github.com/Sebb77/Denormalizer

注意:我必须使用getType()函数和FieldType枚举来解决我的具体问题。 在将来,我将尝试使用一些缓存或其他东西来加速代码:)

注意2:这只是一个示例代码,仅供参考。可以做很多改进。

任何人都可以免费使用该代码,只需发送给我一封感谢邮件:)

非常欢迎任何建议,改进或错误报告。