BAEL-5646: String permutation improvements (#12613)

This commit is contained in:
Eugene Kovko
2022-08-17 22:14:47 +02:00
committed by GitHub
parent fad5f79b8c
commit 2d5e7da1fa
8 changed files with 91 additions and 42 deletions
@@ -1,14 +1,20 @@
package com.baeldung.algorithms.stringpermutation;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class ArrayHelper {
public class Helper {
private ArrayHelper() {
private Helper() {
}
static List<Character> toCharacterList(final String string) {
return string.chars().mapToObj(s -> ((char) s)).collect(Collectors.toList());
}
static String toString(Collection<Character> collection) {
return collection.stream().map(Object::toString).collect(Collectors.joining());
}
}
@@ -1,20 +1,29 @@
package com.baeldung.algorithms.stringpermutation;
import java.util.Collection;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.iterators.PermutationIterator;
public class StringPermutationsApache {
public Collection<List<Character>> eagerPermutationWithRepetitions(final String string) {
final List<Character> characters = ArrayHelper.toCharacterList(string);
return CollectionUtils.permutations(characters);
public List<String> eagerPermutationWithRepetitions(final String string) {
final List<Character> characters = Helper.toCharacterList(string);
return CollectionUtils.permutations(characters)
.stream()
.map(Helper::toString)
.collect(Collectors.toList());
}
public PermutationIterator<Character> lazyPermutationWithoutRepetitions(final String string) {
final List<Character> characters = ArrayHelper.toCharacterList(string);
return new PermutationIterator<>(characters);
public List<String> lazyPermutationWithoutRepetitions(final String string) {
final List<Character> characters = Helper.toCharacterList(string);
final PermutationIterator<Character> permutationIterator = new PermutationIterator<>(characters);
final List<String> result = new ArrayList<>();
while (permutationIterator.hasNext()) {
result.add(Helper.toString(permutationIterator.next()));
}
return result;
}
}
@@ -7,19 +7,21 @@ import org.paukov.combinatorics3.PermutationGenerator.TreatDuplicatesAs;
public class StringPermutationsCombinatoricsLib {
public List<List<Character>> permutationWithoutRepetitions(final String string) {
List<Character> chars = ArrayHelper.toCharacterList(string);
return Generator.permutation(chars)
.simple()
.stream()
.collect(Collectors.toList());
}
public List<String> permutationWithoutRepetitions(final String string) {
List<Character> chars = Helper.toCharacterList(string);
return Generator.permutation(chars)
.simple()
.stream()
.map(Helper::toString)
.collect(Collectors.toList());
}
public List<List<Character>> permutationWithRepetitions(final String string) {
List<Character> chars = ArrayHelper.toCharacterList(string);
public List<String> permutationWithRepetitions(final String string) {
List<Character> chars = Helper.toCharacterList(string);
return Generator.permutation(chars)
.simple(TreatDuplicatesAs.IDENTICAL)
.stream()
.map(Helper::toString)
.collect(Collectors.toList());
}
@@ -1,18 +1,22 @@
package com.baeldung.algorithms.stringpermutation;
import com.google.common.collect.Collections2;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class StringPermutationsGuava {
public Collection<List<Character>> permutationWithRepetitions(final String string) {
final List<Character> characters = ArrayHelper.toCharacterList(string);
return Collections2.permutations(characters);
public List<String> permutationWithRepetitions(final String string) {
final List<Character> characters = Helper.toCharacterList(string);
return Collections2.permutations(characters).stream()
.map(Helper::toString)
.collect(Collectors.toList());
}
public List<String> permutationWithoutRepetitions(final String string) {
final List<Character> characters = Helper.toCharacterList(string);
return Collections2.orderedPermutations(characters).stream()
.map(Helper::toString)
.collect(Collectors.toList());
}
public Collection<List<Character>> permutationWithoutRepetitions(final String string) {
final List<Character> characters = ArrayHelper.toCharacterList(string);
return Collections2.orderedPermutations(characters);
}
}