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

cha*_*300 8 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;}
Run Code Online (Sandbox Code Playgroud)

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

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

但我只获得对这个对象的引用(例如[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]);}
Run Code Online (Sandbox Code Playgroud)

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

有人能告诉我如何从这个列表中获取'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>
Run Code Online (Sandbox Code Playgroud)

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

bra*_*ain 14

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

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

看起来这个查询重新命名了一个对象数组列表,因为数组不是覆盖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));
}
Run Code Online (Sandbox Code Playgroud)


Gar*_*ryF 0

System.out.println("Element "+i+list.get(0));}
Run Code Online (Sandbox Code Playgroud)

应该

System.out.println("Element "+i+list.get(i));}
Run Code Online (Sandbox Code Playgroud)

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

<t:dataList id="myDataList" value="#{houseControlList}" var="element" rows="3" >
...
<t:outputText id="houseId" value="#{element.houseId}"/>
...
</t:dataList>
Run Code Online (Sandbox Code Playgroud)