对于每个嵌套的

时间:2018-07-09 13:56:32

标签: java for-loop foreach hashmap

我有一个表是主表,然后有两个表(ab),它们有主表的外键。如何通过a tableb table示例进行检索:

table header is main id=1

然后在表a上插入one,比表b插入两个onetwo

我想按行显示它是one-one然后是two-two,但现在我遇到了问题,显示one-oneone-twotwo-onetwo-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);
    }
  }
}

1 个答案:

答案 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

希望我能正确理解您的问题,并且这个答案对您有所帮助。

另请参见

A Java collection of value pairs? (tuples?)