aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java')
-rw-r--r--src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java b/src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java
new file mode 100644
index 0000000..4272add
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java
@@ -0,0 +1,27 @@
+package org.zwobble.couscous.util;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+public interface InsertionOrderSet<T> extends Iterable<T> {
+ static <T> InsertionOrderSet<T> copyOf(Iterable<T> iterable) {
+ List<T> list = StreamSupport.stream(iterable.spliterator(), false)
+ .distinct()
+ .collect(Collectors.toList());
+ return new InsertionOrderSet<T>() {
+ @Override
+ public List<T> asList() {
+ return list;
+ }
+
+ @Override
+ public Iterator<T> iterator() {
+ return list.iterator();
+ }
+ };
+ }
+
+ List<T> asList();
+}