Я знаю, что этот вопрос старый, но я не нашел ответа, который бы полностью удовлетворил мои потребности. Поэтому, используя идею наборов мощности и упорядоченных перестановок библиотеки гуавы, я смог получить массив всех комбинаций элементов внутри моего исходного массива.
Что я хотел, это было:
Если у меня есть массив с тремя строками
ArrayList<String> tagsArray = new ArrayList<>(Array.asList("foo","bar","cas"));
Я хочу, чтобы все возможные комбинации элементов находились внутри массива:
{"foo","bar","cas","foobar","foocas","barfoo","barcas","casfoo","casbar","foobarcas","casbarfoo","barcasfoo" . . . . . }
Так что для достижения этого результата я реализовал следующий код, используя библиотеку gava в google:
import static com.google.common.collect.Collections2.orderedPermutations;
import static java.util.Arrays.asList;
public void createTags(){
Set<String> tags = new HashSet<>();
tags.addAll(tagsArray);
Set<Set<String>> tagsSets = Sets.powerSet(tags);
for (Set<String> sets : tagsSets) {
List<String> myList = new ArrayList<>();
myList.addAll(sets);
if (!myList.isEmpty()) {
for (List<String> perm : orderedPermutations(myList)) {
System.out.println(perm);
String myTag = Joiner.on("").join(perm);
tagsForQuery.add(myTag);
}
}
}
for (String hashtag : tagsForQuery) {
System.out.println(hashtag);
}
}
Надеюсь, это кому-нибудь поможет, это было не домашнее задание, а приложение для Android.