создать комбинацию строки списка в Java - PullRequest
0 голосов
/ 07 июня 2018

У меня есть список под названием listTeams, который состоит из строк.Мне нужно сгенерировать все уникальные комбинации этих строк и сохранить их в другом ArrayList с именем линии.Я пробовал следующее, но результаты не желательны:

for(int i=0; i<listTeams.size();i++){
    for(int j=1;j<listTeams.size();j++){
       if (listTeams.get(j).equals(listTeams.get(i)))
                    continue;

           for(int k=2;k<listTeams.size();k++){

                if (listTeams.get(k).equals(listTeams.get(i)) || listTeams.get(k).equals(listTeams.get(j)))
                    continue;
                String str = listTeams.get(i)+listTeams.get(j)+listTeams.get(k);
                lines.put(str,new ArrayList<String>());                 
                }
             }              
           }

Вот оригинальный список: {"A", "B", "C", "D"} То, что я получаю, это

a_b_c
a_b_d
a_c_d
a_d_c
b_c_d
b_d_c
c_b_d
d_b_c

То, что я желаю, это:

a_b_c
a_b_d
a_c_d
b_c_d

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Вам необходимо изменить циклы for следующим образом:

for (int j = i;

и

for (int k = j; 

, чтобы появлялись только уникальные комбинации

0 голосов
/ 07 июня 2018

Как сказал #Berger, следующий код работает так, как вы ожидаете.

for (int i = 0; i < listTeams.size(); i++) {
            for (int j = i+1; j < listTeams.size(); j++) {
                if (listTeams.get(j).equals(listTeams.get(i)))
                    continue;

                for (int k = j+1; k < listTeams.size(); k++) {

                    if (listTeams.get(k).equals(listTeams.get(i)) || listTeams.get(k).equals(listTeams.get(j)))
                        continue;
                    String str = listTeams.get(i) + listTeams.get(j) + listTeams.get(k);
                    lines.add(str);
                }
            }
        }
0 голосов
/ 07 июня 2018
for(int i=0; i<listTeams.size();i++){
    for(int j=i+1;j<listTeams.size();j++){
           for(int k=j+1;k<listTeams.size();k++){
                String str = listTeams.get(i)+listTeams.get(j)+listTeams.get(k);
                lines.put(str,new ArrayList<String>());                 
                }
             }              
           }
...