diff options
Diffstat (limited to 'base/src/main/java/bjc/utils/funcutils/SetUtils.java')
| -rw-r--r-- | base/src/main/java/bjc/utils/funcutils/SetUtils.java | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/base/src/main/java/bjc/utils/funcutils/SetUtils.java b/base/src/main/java/bjc/utils/funcutils/SetUtils.java new file mode 100644 index 0000000..eac417c --- /dev/null +++ b/base/src/main/java/bjc/utils/funcutils/SetUtils.java @@ -0,0 +1,45 @@ +package bjc.utils.funcutils; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class SetUtils { + public static <T> Set<Set<T>> powerSet(Set<T> originalSet) { + Set<Set<T>> sets = new HashSet<Set<T>>(); + + if (originalSet.isEmpty()) { + sets.add(new HashSet<T>()); + return sets; + } + + List<T> list = new ArrayList<T>(originalSet); + + T head = list.get(0); + + Set<T> rest = new HashSet<T>(list.subList(1, list.size())); + + for (Set<T> set : powerSet(rest)) { + Set<T> newSet = new HashSet<T>(); + + newSet.add(head); + newSet.addAll(set); + + sets.add(newSet); + sets.add(set); + } + + return sets; + } + + public static <T> Set<T> toSet(T... elms) { + Set<T> set = new HashSet<>(); + + for(T elm : elms) { + set.add(elm); + } + + return set; + } +} |
