亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建從任何自定義對象類型創建 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 關注
  • 79 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號