org.hibernate.internal.util.collections.streams.GenericArrayCollector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
Hibernate's core ORM functionality
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.internal.util.collections.streams;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
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;
/**
* @author Steve Ebersole
*/
public class GenericArrayCollector implements Collector, T[]> {
public static GenericArrayCollector forType(Class type) {
return new GenericArrayCollector( type );
}
private final Class collectedType;
public GenericArrayCollector(Class collectedType) {
this.collectedType = collectedType;
}
@Override
public Supplier> supplier() {
return ArrayList::new;
}
@Override
public BiConsumer, T> accumulator() {
return List::add;
}
@Override
public BinaryOperator> combiner() {
return (ts, ts2) -> {
ts.addAll( ts2 );
return ts;
};
}
@Override
@SuppressWarnings("unchecked")
public Function, T[]> finisher() {
return ts -> ts.toArray( (T[]) Array.newInstance( collectedType, ts.size() ) );
}
@Override
public Set characteristics() {
return EnumSet.of( Characteristics.CONCURRENT );
}
}