Algoritmo java para combinação sem repetição de elementos de uma lista


Segue algoritmo java que fiz para combinação de elementos de uma lista de objetos quaisquer que utiliza uma lógica de soma de bits para fazer o agrupamento.

java-oracle

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;
   }
}
Related Posts Plugin for WordPress, Blogger...