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}