Printing out all the subsets of a set
You can combine your two methods in just one method, making the whole process much easier to understand due to less "jumping around".

static &lt;T&gt; List&lt;List&lt;T&gt;&gt; getSublists(List&lt;T&gt; list) {
    if (list.isEmpty()) {
        // if empty, return just that empty list
        return Collections.singletonList(list);
    } else {
        List&lt;List&lt;T&gt;&gt; sublists = new ArrayList&lt;List&lt;T&gt;&gt;();
        T first = list.get(0);
        // for each sublist starting at second element...
        for (List&lt;T&gt; sublist : getSublists(list.subList(1, list.size()))) {
            //... add that sublist with and without the first element
            // (two lines more, but this preserves the original order)
            List&lt;T&gt; sublistWithFirst= new ArrayList&lt;T&gt;();
            sublistWithFirst.add(first);
            sublistWithFirst.addAll(sublist);
            sublists.add(sublist);
            sublists.add(sublistWithFirst);
        }
        return sublists;
    }
}


Some more points:


I'd recommend using the more generic List whenever possible.
Also, no need to restrict the method to lists of integers.
That code definitely deserves some comments.
You are actually returning sub-lists; name your methods accordingly.
Note that by calling remove on the input list, you are modifying the original list!