summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/funcutils/SetUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/bjc/utils/funcutils/SetUtils.java')
-rw-r--r--base/src/main/java/bjc/utils/funcutils/SetUtils.java45
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;
+ }
+}