Aplicar algoritmo de permuta

Olá! Precisaria de auxílio para aplicar nesse algoritmo abaixo, uma permuta.
Ou seja, que gere todas as possibilidades, sem repetição, sendo números de 1 a 20, que mostre 10 números, e que sejam 5 pares e 5 ímpares.
Eu só preciso de ajuda para a permuta, o restante meu código já está ok.

    public static void main(String[] args) {
    List<Integer> par = Arrays.asList(2, 4, 6, 8, 10, 12, 14, 16, 18, 20);  //numeros pares possíveis, podia ser inicializado com o for
    List<Integer> impar = Arrays.asList(1, 3, 5, 7, 9, 11, 13, 15, 17, 19); // numeros impares possíveis, podia ser inicializado com o for
    Collections.shuffle(par); // Embaralha pares
    Collections.shuffle(impar); // Embaralha impares

    List<Integer> resultado = new ArrayList<>(par.subList(0, 5)); // Obtem 5 pares da lista embaralhada de pares
    resultado.addAll(impar.subList(0, 5)); // Obtem 5 impares da lista embaralhada de impares
    Collections.shuffle(resultado); // Embaralha o resultado (senão seriam sempre 5 pares seguidos de 5 impares)
    System.out.println(resultado);
}