package de.axone.stream;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
public class Streams {
public static final class ArrayCollector<T> implements Collector<T, ArrayList<T>, T[]> {
private final Class<T> itemClass;
ArrayCollector( Class<T> itemClass ){
this.itemClass = itemClass;
}
@Override
public Supplier<ArrayList<T>> supplier() {
return () -> new ArrayList<T>();
}
@Override
public BiConsumer<ArrayList<T>, T> accumulator() {
return (list,item) -> list.add( item );
}
@Override
public BinaryOperator<ArrayList<T>> combiner() {
return (list1,list2) -> { list1.addAll( list2 ); return list1; };
}
@Override
@SuppressWarnings( "unchecked" )
public Function<ArrayList<T>, T[]> finisher() {
return (list) -> list.toArray( (T[])Array.newInstance( itemClass, list.size() ));
}
@Override
public Set<Collector.Characteristics> characteristics() {
return EnumSet.noneOf( Collector.Characteristics.class );
}
}
}