Skip to content

Instantly share code, notes, and snippets.

@jaycobbcruz
Last active February 16, 2022 09:20
Show Gist options
  • Save jaycobbcruz/cbabc1eb49f51bfe2ed1db10a06a2b26 to your computer and use it in GitHub Desktop.
Save jaycobbcruz/cbabc1eb49f51bfe2ed1db10a06a2b26 to your computer and use it in GitHub Desktop.
Find all permutations of given items using Java 8
public class Permutations {
public static <T> Stream<Stream<T>> of(final List<T> items) {
return IntStream.range(0, factorial(items.size())).mapToObj(i -> permutation(i, items).stream());
}
private static int factorial(final int num) {
return IntStream.rangeClosed(2, num).reduce(1, (x, y) -> x * y);
}
private static <T> List<T> permutation(final int count, final LinkedList<T> input, final List<T> output) {
if (input.isEmpty()) { return output; }
final int factorial = factorial(input.size() - 1);
output.add(input.remove(count / factorial));
return permutation(count % factorial, input, output);
}
private static <T> List<T> permutation(final int count, final List<T> items) {
return permutation(count, new LinkedList<>(items), new ArrayList<>());
}
}
@Azedyn
Copy link

Azedyn commented Jun 29, 2021

How to generate all permutations of 2 lists?

Permutations.of(list1, list2)

Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment