Ammulu Sree
Ammulu Sree

Reputation: 3

how to print set of sets in java?

HashSet<Set<Set<int[]>>> Sa=new HashSet<Set<Set<int[]>>>();

Now, i need to print Sa.using single iterator I am not able to print

Iterator<Set<Set<int[]>>> iter = Sa.iterator();
while (iter.hasNext()) {
    System.out.println(iter.next());
}

this isn't working

Upvotes: 0

Views: 3927

Answers (2)

Saif Azmi
Saif Azmi

Reputation: 83

First of all, you shouldn't be using primitive data types like int with Generic classes. So in place of int[] use List<Integer>.

Now if you really just want to use one Iterator then you can use a bunch of for-each loops like this -

for (Set<Set<List<Integer>>> aSa : Sa) {
        for (Set<List<Integer>> bSa : aSa) {

            Iterator<List<Integer>> iter = bSa.iterator();

            while(iter.hasNext()) {
                System.out.println(iter.next());
            }
        }
 }

Full test code -

    HashSet<Set<Set<List<Integer>>>> Sa = new HashSet<>();

    // Creating dummy data

    // Two List of Integers
    List<Integer> listInt1 = new ArrayList<>();
    List<Integer> listInt2 = new ArrayList<>();

    // Populating the list
    for (int i = 0; i < 4; i++) {
        listInt1.add(i);
        listInt2.add(i+30);
    }

    // Data structure of Sa.
    Set<List<Integer>> setOfIntLists1 = new HashSet<>();
    Set<List<Integer>> setOfIntLists2 = new HashSet<>();

    setOfIntLists1.add(listInt1);
    setOfIntLists1.add(listInt2);

    setOfIntLists2.add(listInt2);
    setOfIntLists2.add(listInt1);

    Set<Set<List<Integer>>> setOfset1 = new HashSet<>();
    Set<Set<List<Integer>>> setOfset2 = new HashSet<>();

    setOfset1.add(setOfIntLists1);
    setOfset1.add(setOfIntLists2);

    setOfset2.add(setOfIntLists2);
    setOfset2.add(setOfIntLists1);

    // Adding data to Sa
    Sa.add(setOfset1);
    Sa.add(setOfset2);

    for (Set<Set<List<Integer>>> aSa : Sa) {
        for (Set<List<Integer>> bSa : aSa) {

            Iterator<List<Integer>> iter = bSa.iterator();

            while(iter.hasNext()) {
                System.out.println(iter.next());
            }
        }
    }
}

Output

[0, 1, 2, 3]

[30, 31, 32, 33]

Upvotes: 1

Yassin Hajaj
Yassin Hajaj

Reputation: 21975

Here it is, assuming you have multiple levels to your Set objects and your array, you have to iterate over each level.

Iterator<Set<Set<int[]>>> iter = Sa.iterator();
Iterator<Set<int[]>> innerIter;
Iterator<int[]> deepIter;
while (iter.hasNext()) {
    innerIter = iter.next().iterator();
    while(innerIter.hasNext()){
        deepIter = innerIter.next().iterator();
        while(deepIter.hasNext()){
            System.out.println(Arrays.toString(deepIter.next()));
        }
    }
}

Upvotes: 1

Related Questions