persolijn

an efficient router for busses
Log | Files | Refs

ContainerCollector.java (1331B)


      1 package osm.common;
      2 
      3 import java.util.Set;
      4 import java.util.function.BiConsumer;
      5 import java.util.function.BinaryOperator;
      6 import java.util.function.Function;
      7 import java.util.function.Supplier;
      8 import java.util.stream.Collector;
      9 
     10 public 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 }