aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/util/InsertionOrderSet.java
blob: 8d168fc7de64e918d524bd4f043963ba611a65f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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();
            }

            @Override
            public boolean isEmpty() {
                return list.isEmpty();
            }
        };
    }

    List<T> asList();
    boolean isEmpty();
}