Java 遍历对象列表

Java 遍历对象列表,java,jpa,Java,Jpa,代码段: public List<Rect> display(){ TypedQuery<Rect> tp = em.createQuery("SELECT s,r FROM Rect r INNER JOIN r.cirlceId.squareCollection s", Rect.class); List<Rect> list = tp.getResultList(); return list; } 现在,如何遍历列表以获得square或

代码段:

public List<Rect> display(){
    TypedQuery<Rect> tp = em.createQuery("SELECT s,r FROM Rect r INNER JOIN r.cirlceId.squareCollection s", Rect.class);
    List<Rect> list = tp.getResultList();
return list;
}
现在,如何遍历列表以获得square或Rect,或者如何返回Rect列表

更新了我的问题


我对JPQL查询有点陌生,我想实现如下SQL查询:

SELECT * FROM Rect INNER JOIN Square WHERE Rect.squareId = Square.id

然后将结果插入列表中

这只是一个示例,说明了如何做到这一点。您可以根据需要进行修改

for(Object obj : yourList){
    if(obj instanceof Square){
       // Add to Square List
    }else if(obj instanceof Rect){
       // Add to Rect List
    }else{
       // Do what you want
    }
}

您的JPQL查询有多个select项。如果只需要
Rect
,请将查询更改为
SELECT r FROM Rect r internal JOIN r.cirlceId.squarescollection s
(删除
s
)。您可能需要指定
选择DISTINCT r…
。如果您的
squareCollection
是eagry fetch,您也可以从对象图中获取正方形(即从结果列表中获取
Rect
r,并访问r.circleId.squareCollection.get(0)…。

您返回的是Rect列表。那么问题是什么呢?我假设这意味着
Square
Rect
,他想解析出
Rect
,但我不明白为什么
Rect
对象[]
。需要更多信息。这就是问题所在,在调用create查询之后,
tp.getResultList()
返回上面树中列出的对象列表的值。从对象列表中,我想得到所有正方形或所有Rects@galao:那么“TypedQuery”声明的用途是什么呢。不应该只返回Rect.class的对象?instanceof会有所帮助,但我想您的问题是列表中的对象不是Rect。classi试图检索Rect结果,但失败了。即使只有一个列表,它也会返回一个包含Rect和Square的对象列表。我对JPQL查询有点陌生,但我想实现的是类似于以下SQL查询的东西:从Rect内部连接方选择*,其中Rect.squared=Square.id我需要将每个结果都放在一个列表中,然后你就得到了正确的部分,SQL查询应该是正确的(您可以跳过
internal
关键字,因为您的JPA提供商将为您这样做)。这就是说,你可以在我的答案后面有一个
列表
,或者使用你原来的帖子有一个
列表
。在第一种情况下,您可以使用graph
r.circle.squareCollection.get(0)
访问
Square
s,或者您可以使用r.J的方法迭代结果列表。是否有任何方法将Square和Rect的值组合成1个列表?我能想到的唯一方法是继承。如果
Square
Rect
都继承自一个超类(比如
Shape
),您可以这样做。退房即使如此,最终还是会得到一个
列表
,然后使用instanceof来区分子类型。
for(Object obj : yourList){
    if(obj instanceof Square){
       // Add to Square List
    }else if(obj instanceof Rect){
       // Add to Rect List
    }else{
       // Do what you want
    }
}