Как оптимально перебрать все возможные комбинации 4х массивов?
Хм...а чем не устраивает простой цикл с 4 уровнями, если нужны "абсолютно все возможные варианты IP адресов"? Заодно и адреса по порядку идти будут...
for(int i0=0; i<=255; i++) {
    for(int i1=0; i<=255; i++) {
        for(int i2=0; i<=255; i++) {
            for(int i3=0; i<=255; i++) {
                writeToFile(printf("%d.%d.%d.%d\n", i0, i1, i2, i3));
            }
        }
    }
}
Добрый день.
Не знаю, будет ли это полезно вам, но библиотека действительно есть (Apache Commons Math):
CombinatoricsUtils.combinationsIterator()
https://commons.apache.org/proper/commons-math/jav...