import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
List<Object> lista = new ArrayList<Object>();
lista.add("A");
lista.add("B");
lista.add("C");
lista.add("D");
lista.add("E");
List<List<Object>> combinacoes = combina(lista, 2);
for (List<Object> combinacao : combinacoes) {
System.out.println(combinacao.toString());
}
}
public static List<List<Object>>
combina(List<Object> lista, int n) {
List<List<Object>> combinacoes =
new ArrayList<List<Object>>();
int size = lista.size();
char[] chars = new char[size];
for (long i = 0, max = 1 << size; i < max; i++) {
int soma = 0;
for (int j = 0; j < size; j++) {
chars[j] =
(char) (((i >>> (size - j - 1)) & 1) + '0');
if (chars[j] == '1') {
soma++;
}
}
if (soma == n) {
List<Object> combinacao = new ArrayList<Object>();
for (int k = 0; k < size; k++) {
if (chars[k] == '1') {
Object obj = lista.get(k);
combinacao.add(obj);
}
}
combinacoes.add(combinacao);
}
}
return combinacoes;
}
}