我有一个表是主表,然后有两个表(a
,b
),它们有主表的外键。如何通过a table
和b table
示例进行检索:
table header is main id=1
然后在表a
上插入one
,比表b
插入两个one
,two
我想按行显示它是one-one
然后是two-two
,但现在我遇到了问题,显示one-one
,one-two
,two-one
, two-two
我的朋友说我必须使用hashmap,下面的代码使我循环获取不必要的值
//这是我的代码
ArrayList<Main>listMain = mainDAO.getlAllMain(Connection con);
for(Main listMain : listMain) {
ArrayList<A> listA = aDAO.getallbyMainId(Connection con, int main);
for(A listA : listA) {
ArrayList<B> listB = bDAO.getallbyMainId(Connection con, int main);
for(B listB : listB) {
Main main = new Main();
main.setMainName(listMain.getName());
a.set(listA.getName);
b.set(listB.getName);
}
}
}
答案 0 :(得分:0)
您不应在此处使用嵌套的for-each循环。
尝试在listMain
上建立索引,并将每次迭代的结果存储在一个元组中。该元组可以存储在Map
中。如您的朋友所述,您可以为此使用HashMap
。
这样的事情应该可以解决问题:
ArrayList<Main>listMain = mainDAO.getlAllMain(Connection con);
Map<Integer, Pair<A, B>> map = new Hashmap<>();
for (int i = 0; i < listMain.size(); i++) {
ArrayList<A> listA = aDAO.getallbyMainId(Connection con, int main);
ArrayList<B> listB = bDAO.getallbyMainId(Connection con, int main);
A aValue = listA.get(i);
B bValue = listB.get(i);
map.put(i, new Pair(aValue, bValue));
}
我在这里使用apache-commons类Pair作为元组。请参阅下文以获取有关Java中元组的更多信息。例如,您可以为此使用自定义类。
还可以根据您稍后要使用的信息将配对内容的类型和映射键更改为String
。
希望我能正确理解您的问题,并且这个答案对您有所帮助。
另请参见