【问题标题】:print the items in an arraylist row after row to get a particular index value in a column逐行打印arraylist中的项目以获取列中的特定索引值
【发布时间】:2017-10-18 06:52:19
【问题描述】:

我有一个来自数据库的表,它查看下面给出的这个结构

id | col1  | col2
1  | item1 | item2
2  | item3 | item4

我已经声明 arraylist 来保存如图所示的值

ArrayList<String> dataList = new ArrayList<String>();

我已经声明了 json 数组来保存来自数据库的结果数据数组

JSONArray jArray = new JSONArray(result);

我正在遍历 json 数组并将项目添加到数组列表中,如图所示

 for (int i = 0; i < jArray.length(); i++) {
     JSONObject json_data = jArray.getJSONObject(i);
     dataList.add(json_data.getString("col1"));
     dataList.add(json_data.getString("col2"));

}

如何遍历 arraylist 以逐行获取项目,以便我可以按索引位置在某一列中获取数据。以下是我的尝试,但它没有按预期工作,因为它迭代打印出所有内容

for (String line : dataList) {
System.out.println("this is the element in the arraylist>>>>> " +line);
}

【问题讨论】:

    标签: java mysql arrays json arraylist


    【解决方案1】:

    您可以考虑使用String 数组的列表,以便每个条目代表一行:

    名单:

    ArrayList<String[]> dataList = new ArrayList<String[]>();
    

    填充列表:

     for (int i = 0; i < jArray.length(); i++) {
    
         JSONObject json_data = jArray.getJSONObject(i);
         String[] strArray = new String[2];
         strArray[0] = json_data.getString("col1");
         strArray[1] = json_data.getString("col2");
         dataList.add(strArray);
    
     }
    

    使用列表:

    for (String[] line : dataList) {    
    
        System.out.println("Elements in the arraylist >>>>> " +line[0] + " " +line[1]);    
    
    }
    

    或者,对于更通用的方式,您可以使用枚举:

    private enum Column {
    
            COL1("col1"), COL2("col2");
    
            private String name;
    
            public String getName() {
                return name;
            }
    
            Column(final String name) {
                this.name = name;
            }
    
    }
    

    然后填充列表:

     for (int i = 0; i < jArray.length(); i++) {
    
         JSONObject json_data = jArray.getJSONObject(i);
         String[] strArray = new String[Column.values().length];
         for (Column column : Column.values()){
            strArray[column.ordinal()] = json_data.getString(column.getName());
         }
         dataList.add(strArray);
    
     }
    

    并且有一个可以过滤一列或多列的显示方法:

    private void displayColumns(Column ...columns){
    
        for(Column column : columns){
    
            //System.out.println(column.getName());
    
            for (String[] line : dataList) {    
    
                System.out.println( line[column.ordinal()]);    
    
            }
        }
    }
    

    你可以像这样调用这个方法:

    displayColumns(Column.COL1);
    displayColumns(Column.COL2);
    displayColumns(Column.COL1, Column.COL2);
    

    【讨论】:

    • 不知道你是否在附近,如何将这里的所有项目打印到控制台 >>> dataListCol.add(strArrayCol);
    • 您能否根据问题中的表格内容举例说明您期望的输出?
    • 我需要col1和col2中的所有内容
    • @parker : 最后的编辑显示了另一种方式,更通用和灵活。
    【解决方案2】:

    尝试创建一个对象来保存您的值,如下所示:

    public class ObjectWrapper {
        private String col1;
        private String col2;
        // getter and setters;
        public String toString(){
           return "col1: " + col1 + "col2: " + col2;
        }
    }
    
    ArrayList<ObjectWrapper> dataList = new ArrayList<ObjectWrapper>();
    for (int i = 0; i < jArray.length(); i++) {
            JSONObject json_data = jArray.getJSONObject(i);
            ObjectWrapper obj = new ObjectWrapper();
            obj.setCol1(json_data.getString("col1")));
            obj.setCol2(json_data.getString("col2")));
            dataList.add(obj);
    }
    
    for (ObjectWrapper line : dataList) {
                   System.out.println("this is the element in the arraylist>>>>> " +line);
        }
    

    【讨论】:

      【解决方案3】:

      这是最简单的方法

      public Class A{
      private int id;
      private String col1;
      private String col2;
      @Override
      public String toString(){
             return "Id: "+id+ " col1: " + col1 + " col2: " + col2;
          }
      }
      //Main Method
      ArrayList<A> list=new Gson.fromJson(result,A.class);
      for(A a:list)
      System.out.println(a.toString());
      

      或

      for(int i=0;i<list.size();i++)
      System.out.println(list.get(i));
      

      【讨论】:

        猜你喜欢
        • 2023-03-14
        • 2019-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多