在一次開發中我須要從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操做,List每remove掉一個元素之後,後面的元素都會向前移動,此時若是執行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(); } }