Hibernate查詢返回list對象分析學習

在一次開發中我須要從Hibernate查詢返回List對象中(注:這個list對象並不是一個完整的model類,而是多表查詢拼湊的一些字段),取出部分數據在作一次篩選操做。但list只是一個接口類,並無具體指明什麼類型,因此咱們不能輕鬆的獲取到每一個list中對象。java

因而使用debug模式,我想查看一下這返回的list具體是什麼類生成的。經過下圖咱們能夠明顯的看出這個list使用對象數組類new出來的。sql

List<Object[]> list = new ArrayList<Object[]>();


知道具體的生成類型,咱們就能夠單獨取出每一個list中的對象,並根據對象中一些屬性的值進行其餘判斷操做。數組

以下是簡單的實例代碼:app

hql.append(「SELECT A1.a, A1.b,COUNT(B1.c) FROM AAA A1, BBB B1」);
List<Object[]> queryList = acceptVehiclesService.findBysql(hql.toString());
Object[] obj = null;
for (int i = queryList.size()-1; i >= 0; i--) {
    obj = queryList.get(i);
    String tmp = obj[0].toString();
    if (tmp.length() != 15 && tmp.length() != 18) {
       queryList.remove(i);
    }
}

Ps補充一個技巧】spa

對於list中的removed操做,Listremove掉一個元素之後,後面的元素都會向前移動,此時若是執行i=i+1,則剛剛移過來的元素沒有被讀取。在網上搜了一下大概有三種方法解決這個問題。debug

1.倒過來遍歷list(我的比較喜歡這種)code

for (int i = list.size()-1; i > =0; i--) {
  if (((String) list.get(i)).startsWith("abcde")) {
   list.remove(i);
  }
}

 

2.每移除一個元素之後再把i移回來對象

for (int i = 0; i < list.size(); i++) {
  if (((String) list.get(i)).startsWith("abcde")) {
   list.remove(i);
   i=i-1;
  }
}

 

3.使用iterator.remove()方法刪除 接口

for (Iterator it = list.iterator(); it.hasNext();) {
  String str = (String)it.next();
  if (str.equals("chengang")){
   it.remove();
  }
}
相關文章
相關標籤/搜索