1

我已经查询了多个表,并且正在获取数据。现在我想以表格形式显示该数据,这样如果 Ids 重复,它将仅在单行中。

我查询过

 Query  "select a.id,b.status from A a,B b 

 List li = data from query;
 Iterator iterator = li.iterator();
 while(iterator.hasNext()){
      System.out.println(id+"-"+status)
 }

我正在获取数据,

**id                 status**        
  10                  G1
  10                  G2 
  10                  G3 
  15                  G1
  16                  
  17                  G1
  17                  G2

现在我想显示如下(例如 10 重复 3 次,所以我想在单行中显示它的 3 个等级,15 一次,16 没有等级,17 等级两次)

  id          statusfirst           statussecond     statusthird
  10           G1                    G2               G3
  15           G1                    NA               NA 
  16           NA                    NA               NA
  17           G1                    G2               Na     
4

1 回答 1

1

您可以使用 LinkedHashMap 来完成此类分类并保持 ids 顺序。

请在下面找到源代码示例:

    // put this line outside the loop of ids and statuses
    // In case your ids are Integers change the LinkedHashMap<String, String> to LinkedHashMap<Integer, String>.
    LinkedHashMap<String, ArrayList<String>> lh = new LinkedHashMap<String, ArrayList<String>>();

    String id = "1";
    String status = "G1";

    // put the below lines in the loop of ids and sstatuses
    if (id != null && !"".equals(id.trim())) {
        if (!lh.containsKey(id)) {
            final ArrayList<String> al = new ArrayList<String>();
            al.add(status);
            lh.put(id, al);
        } else {
            lh.get(id).add(status);
        }
    }

    Iterator<String> lhIter = lh.keySet().iterator();
    while (lhIter.hasNext()) {
        final String thisId = lhIter.next();
        final ArrayList<String> statusesAL = lh.get(thisId);
        final StringBuilder strB = new StringBuilder();
        strB.append("id: '").append(thisId).append("'");
        int i = 0;
        for (String s : statusesAL) {
            strB.append(" status[").append(i).append("]: '").append(s).append("'");
            i++;
        }
        System.out.println(strB.toString());
    }

输出将如下所示:id: '1' status[0]: 'G1'。

如果一个 id 有更多状态,输出将是这样的:id: '1' status[0]: 'G1' status[1]: 'G2'。

于 2012-08-19T21:32:18.340 回答