user1184777
user1184777

Reputation: 1027

java Collection FrameWork

i want to store Arraylist inside Another List, some thing like this i know its wrong but pretty much like this....

 List list=new ArrayList();
 list.add(new("element1","element2","element3",element4=?);
 list.add(new("element5","element6","element7",element8=?);

now if u see the above code its ok and fine to add elements or first row to list up to third element but the fourth element is another array[string array] how to add it or append it to the first row of element. same with the second row.

NOTE:- element4 and element8 are also differ in length means element4 has 2 string and element 8 has 10 strings.

when i display the list it should show list like this

  The first row of list is
  element1  element2  element3  element4.1  element4.2 
  the second row of list is
  element5  element6  element7  element8.1  element8.2 element8.3 element8.4 element8.5 element8.6 element8.7 element8.9 element8.10

Upvotes: 1

Views: 686

Answers (4)

npinti
npinti

Reputation: 52185

You can add lists to other lists by doing something like so: List<List<String>> myList = new ArrayList<List<String>>();.... However, seeing that you are adding items which have a different type, I would recommend you do the following (assuming you always have 3 array lists and 1 array):

  • Create a new class which takes in 4 arguments, these being the 3 array lists and the 1 array.

  • Have your class override its own toString() method in such a way that it will iterate over the elements and print their content in whatever way you would like.

  • Create an list using generics, using something like this: List<MyClass> myList = new ArrayList<MyClass>();.... In this case, MyClass is the class I have described in point 1. This will allow you to create a type safe structure which does not need to do any casting, thus making your code look cleaner and probably run slightly faster.

Seeing that you say that the elements can contain list of strings of various lengths, you can do something like this:

public class MyClass
{
    private List<String> arrayList1;...
    private String[] myArray;...

    public MyClass(List<String> list1, ..., String[] myArray)
    {
        this.arrayList1 = list1;
        this.myArray = myArray;
        ...
    }

    ...
    @Override
    public String toString()
    {
        StringBuilder sb = new StringBuilder();
        //iterate adding your list contents to your string builder.
        return sb.toString();
    }
}

Adding your elements then will be something like this:

...
List<String> arrayList1 = ...;
arrayList1.add("...");...
String[] myArray = ...;

MyClass myClass = new MyClass(arrayList1, ..., myArray);
System.out.println(myClass.toString());

Upvotes: 0

Andreas Dolk
Andreas Dolk

Reputation: 114777

Unify it to a List of lists of lists, a three dimensional matrix - even if your first elements are single values, it makes sense to wrap them in lists just to simplify the code:

List<List<List<String>>> matrix = new ArrayList<List<List<String>>>();

List<List<String>> row = new ArrayList<List<String>>();
matrix.add(row);

List<String> column1 = new ArrayList<String>();
column1.add("element1");
row.add(column1);

List<String> column2 = new ArrayList<String>();
column1.add("element2.1");
column1.add("element2.2");
row.add(column2);

Upvotes: 0

Kuldeep Jain
Kuldeep Jain

Reputation: 8598

So from what I understood about your question, you need a List<List<String>>. Do it as follows:

    List<String> strs1 = new ArrayList<String>();
    strs1.add("element1");
    strs1.add("element2");

    List<String> strs2 = new ArrayList<String>();
    strs2.add("element3");

And then

    List<List<String>> listOfList = new ArrayList<List<String>>();
    listOfList.add(strs1);
    listOfList.add(strs2);

OR

    List<List<String>> asList = Arrays.asList(strs1, strs2);

Upvotes: 1

dhaval
dhaval

Reputation: 7659

Have you tried following way:

    List list = new ArrayList();
    list.add(Arrays.asList("element1", "element2", "element3",
            Arrays.asList("element4.1", "element4.2")));
    list.add(Arrays.asList("element5", "element6", "element7",
            Arrays.asList("element8.1", "element8.2", "element8.3")));

    // print values
    System.out.println(list.get(0));
    System.out.println(list.get(1));

Upvotes: 0

Related Questions