misc/persolijn

osm-protobuf/src/main/java/osm/common/ContainerCollector.java in master
Repositories | Summary | Log | Files

ContainerCollector.java (1331B) download


 1package osm.common;
 2
 3import java.util.Set;
 4import java.util.function.BiConsumer;
 5import java.util.function.BinaryOperator;
 6import java.util.function.Function;
 7import java.util.function.Supplier;
 8import java.util.stream.Collector;
 9
10public class ContainerCollector<T extends Container<T, A>, A> implements Collector<A, T, T> {
11    public static final int CONCURRENT = 1 << 0;
12    public static final int UNORDERED = 1 << 1;
13    public static final int IDENTITY_FINISH = 1 << 2;
14
15    private final Supplier<T> supplier;
16    private final Set<Characteristics> characteristics;
17
18    public ContainerCollector(Supplier<T> supplier, Set<Characteristics> characteristics) {
19        this.supplier = supplier;
20        this.characteristics = characteristics;
21    }
22
23    @Override
24    public Supplier<T> supplier() {
25        return supplier;
26    }
27
28    @Override
29    public BiConsumer<T, A> accumulator() {
30        return Container::accumulate;
31    }
32
33    @Override
34    public BinaryOperator<T> combiner() {
35        return (a, b) -> {
36            a.fold(b);
37            return a;
38        };
39    }
40
41    @Override
42    public Function<T, T> finisher() {
43        return c -> {
44            c.finish();
45            return c;
46        };
47    }
48
49    @Override
50    public Set<Characteristics> characteristics() {
51        return characteristics;
52    }
53}