aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-30 14:27:25 +0100
committerMichael Williamson <mike@zwobble.org>2016-03-30 14:27:25 +0100
commitd299b608799b3b722e97ba0b3f41edb122dc4786 (patch)
treed239a0c5c28ece59999b5b8fee2059a8f7796925 /src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java
parenteda05cc1e2f845b4e7c3eeea505c535432240197 (diff)
Remove duplicates when finding captured variables
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();
+}