为了账号安全,请及时绑定邮箱和手机立即绑定

创建从任何自定义对象类型创建 csv 字符串的方法 - 通用

创建从任何自定义对象类型创建 csv 字符串的方法 - 通用

慕无忌1623718 2022-06-04 09:54:53
是否可以创建方法来循环任何自定义对象类型的列表,然后从中构建一个 csv 字符串?到目前为止,我有一个这样的方法签名:loopData(List<T> records){}然后我想循环对象中的每个字段,而不必指定对象类型。到目前为止,这就是我所看到的,但它似乎明确说明了对象类型,如 ClassABC 中所示:ClassABC abc = new ClassABC();//!!explicitly stating custom object type!!!for (Field field : abc.getClass().getDeclaredFields()) {    field.setAccessible(true);    String name = field.getName();    Object value = field.get(abc);    System.out.printf("%s: %s%n", name, value);}有什么办法可以做到这一点?循环每个字段而不明确说明对象类型?像这样的东西怎么样:for(T o : records){            for(Field field:o.getClass().getDeclaredFields()) {                field.setAccessible(true);                String name = field.getName();               Object value = null;               try {                   value = field.get(o);               } catch (IllegalArgumentException | IllegalAccessException e) {                   // TODO Auto-generated catch block                   e.printStackTrace();               }               System.out.printf("%s: %s%n", name, value);            }}这个循环是否一致?它会每次都以相同的顺序循环对象字段吗?
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

最后,这就是有效的...


我可以获取字段名称并将它们发送给 DOMO 以进行创建,如下所示:


    List<Column> domoColumns = new ArrayList<Column>();

            for(Field field:o.getClass().getDeclaredFields()) {

                field.setAccessible(true);

                String name = field.getName();

                domoColumns.add(new Column(ColumnType.STRING,name));

            }

return domoColumns;

然后我像这样创建 CSV:


StringBuilder stringBuilder = new StringBuilder();

    for (T o : records) {


        int numberOfFields = o.getClass().getDeclaredFields().length;

        int counter = 1;


        Field[] f = o.getClass().getDeclaredFields();

        for (int i = 0; i < o.getClass().getDeclaredFields().length; i++) {

            f[i].setAccessible(true);

            Object value = null;

            try {

                value = f[i].get(o);


                if (counter < numberOfFields) {

                    stringBuilder.append("\"").append(value).append("\"").append(",");

                } else {

                    stringBuilder.append("\"").append(value).append("\"").append(System.getProperty("line.separator"));

                }

            } catch (IllegalArgumentException | IllegalAccessException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }


            counter++;

        }



    }


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号