Saulius S
Saulius S

Reputation: 401

taking elements from all arrayLists one at a time

considering there is a structure as described in http://prohost.lt/stack/q.png

In the main arrayList we have n elements(sub arrayLists) (as for image we can consider n=3).

How to make a dynamic loop thru all sub arrayLists so as to get:

sarraylist1.get(0), sarrayList2.get(0), .. sarraylistN.get(0)

In case n=3 it would be

for(sarraylist1){
    for( sarraylist2){
        for(sarraylist3){
            element from every list
        }
    }
}

Upvotes: 0

Views: 73

Answers (4)

Vishal K
Vishal K

Reputation: 13066

After watching your comment I suggest you to use recursive approach to solve your problem.

public void recursiveCall(ArrayList list)
{
  for ( Object obj : list)
  {
    if (obj instanceOf ArrayList)
    {
      recursiveCall((ArrayList)obj);
    }
    else
    {
       System.out.print(obj);
    }
  }
}

Upvotes: 0

Jonathan Drapeau
Jonathan Drapeau

Reputation: 2610

If I understood correctly, you have one List containing n Lists for which you want to get the first, second and so on, element of each list. This code does that.

for (int i = 0; i < highestSizeOfChildrenList; i++) {
 List<Object> lstOfItemInChild = new Arraylist<Object>();
  for (List childList : mainList) {
     if (i < childList.size()) {
       lstOfItemInChild.add(childList.get(i));
     }
  }

  // lstOfItemInChild now contains all the element i of the sub arrays
}

You will need to know the size of the biggest subList to get all the elements of that list, that is what highestSizeOfChildrenList represents.

Upvotes: 0

Devin Lynch
Devin Lynch

Reputation: 289

Maybe I misunderstood what you were asking, but would something as simple as this not work?

List<List> lists = new ArrayList<List>();
for(List l : lists){
    for(List subl: l)
        Object o = subl.get(0);
}

Upvotes: 1

Marcelo Tataje
Marcelo Tataje

Reputation: 3871

Based on your scheme of the image, you can also do it with the "for while loop":

for (int mainArrayElements = 0; mainArrayElements < listOfLists.size(); mainArrayElements++) {
    List arraysInMain = ((List)listOfLists.get(mainArrayElements));
    for (int subArrayElements = 0; subArrayElements < arraysInMain.size(); subArrayElements++) {
        List deepArray = ((List)listOfLists.get(subArrayElements));
        for (int innerArrayElements = 0; innerArrayElements <  deepArray.size() ; innerArrayElements++) {
            System.out.println(deepArray.get(innerArrayElements));
        }
    }
}

But as mentioned before, recursion would be a really great combo to knock out the problem :).

Best regards.

Upvotes: 0

Related Questions