如何从List <object>(Java)?</object>获取数据

时间:2010-11-08 11:13:40

标签: java

我是Java新手,在显示对象列表中的数据方面存在问题。我有一个简单的方法,它应该跨多个表收集数据并将其返回给我的控制器:

public List<Object> getHouseInfo(){
Query q = em.createNativeQuery("SELECT houses.id, addresses.country, addresses.region, house_details.rooms, house_details.square FROM houses, addresses, house_details");
List<Object> myList = q.getResultList(); 
return myList;}

现在我想在控制器中获取这些数据,但我不知道如何从列表中获取单个结果。我试着做这样的事情:

List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
System.out.println("Element "+i+list.get(0));}

但我只获得对这个对象的引用(例如[Ljava.lang.Object; @ 167a47b)。我也试过使用Iterator,但结果是一样的。我试图使用这样的代码:

List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
System.out.println("Element "+i+list.get(0)[0]);}

但它对我没有帮助 - 这以编译错误结束。

有人可以告诉我如何从这个列表中获取'id'(整数值)吗? 我在我的'View'中使用MyFaces,我有这样的代码(houseControll是我的JSF Managed Bean的名称 - 控制器):

<t:dataList id="myDataList" value="#{houseControll.fullOffer}" var="element" rows="3" >
...
<t:outputText id="houseId" value="#{element[0]}"/>
...
</t:dataList>

此代码正确显示“id”值 - 我有1,2,3,...值。如何在控制器中获得相同的结果?如何在控制器中打印数据?

5 个答案:

答案 0 :(得分:14)

对于初学者,你没有正确地迭代结果列表,你根本就没有使用索引i。尝试这样的事情:

List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
   System.out.println("Element "+i+list.get(i));
}

看起来查询会重新组合一个对象数组列表,因为数组不是覆盖toString的正确对象,您需要先进行强制转换,然后再使用Arrays.toString()。

 List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
   Object[] row = (Object[]) list.get(i);
   System.out.println("Element "+i+Arrays.toString(row));
}

答案 1 :(得分:4)

这样做

List<Object[]> list = HQL.list(); // get your lsit here but in Object array

您的查询是:“SELECT houses.id,addresses.country,addresses.region,...”

for(Object[] obj : list){
String houseId = String.valueOf(obj[0]); // houseId is at first place in your query
String country = String.valueof(obj[1]); // country is at second and so on....
.......
}
通过这种方式,您可以轻松获得混合对象,但您应该事先知道您获得的值是什么,或者您可以通过打印要知道的值进行检查。对不起英语不好我希望这个帮助

答案 2 :(得分:0)

System.out.println("Element "+i+list.get(0));}

应该是

System.out.println("Element "+i+list.get(i));}

要使用JSF标记,请为dataList value属性提供对元素列表的引用,var属性依次为该列表的每个元素的本地名称。在dataList中,您使用对象的属性(getters)来输出有关该单个对象的信息:

<t:dataList id="myDataList" value="#{houseControlList}" var="element" rows="3" >
...
<t:outputText id="houseId" value="#{element.houseId}"/>
...
</t:dataList>

答案 3 :(得分:0)

你应该尝试这样的事情

List xx= (List) list.get(0)
String id = (String) xx.get(0)

或者如果你有一个House值对象,那么查询的结果是相同的类型,那么

House myhouse = (House) list.get(0);

答案 4 :(得分:0)

全部感谢您的回复。好的解决方案是使用'brain`s'方法:

List<Object> list = getHouseInfo();
for (int i=0; i<list.size; i++){
Object[] row = (Object[]) list.get(i);
System.out.println("Element "+i+Arrays.toString(row));
}

问题解决了。再次感谢。