<Java>組み合わせを作る

import java.util.*;

public class Sample {
    public static void main(String[] args) {
        var list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        var empty = new ArrayList<Integer>();
        var result = new ArrayList<List<Integer>>();
        for(var i = 1; i <= list.size(); i++)
            generateCombination(list, empty, i, result);
        for(var r : result)
            System.out.println(r);
    }
    static void generateCombination(List<Integer> src,
                                    List<Integer> dest,
                                    int n,
                                    List<List<Integer>> result) {
        if(n == 0) result.add(dest);
        else {
            for(var i = 0; i < src.size(); i++) {
                var d = new ArrayList<>(dest);
                d.add(src.get(i));
                var s = src.subList(i + 1, src.size());
                generateCombination(s, d, n - 1, result);
            }
        }
    }
}
[1]
[2]
[3]
[4]
[1, 2]
[1, 3]
[1, 4]
[2, 3]
[2, 4]
[3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]
[1, 2, 3, 4]