![JAR search and dependency download from the Maven repository](/logo.png)
com.github.andyshao.util.stream.CollectorImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Gear Show documentation
Show all versions of Gear Show documentation
Enhance and formating the coding of JDK
The newest version!
package com.github.andyshao.util.stream;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import java.util.Collections;
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;
/**
*
* Title:
* Descript:
* Copyright: Copryright(c) Jan 16, 2018
* Encoding: UNIX UTF-8
*
* @author weichuang.shao
*
* @param the type of input elements to the reduction operation
* @param the mutable accumulation type of the reduction operation (often
* hidden as an implementation detail)
* @param the result type of the reduction operation
* @since 3.2.9
*/
@AllArgsConstructor
@NoArgsConstructor
public class CollectorImpl implements Collector {
private Supplier supplier;
private BiConsumer accumulator;
private BinaryOperator combiner;
private Function finisher;
private Set characteristics;
/**CH concurrent ID*/
public static final Set CH_CONCURRENT_ID =
Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.CONCURRENT , Collector.Characteristics.UNORDERED , Collector.Characteristics.IDENTITY_FINISH));
/**CH concurrent NOID*/
public static final Set CH_CONCURRENT_NOID = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.CONCURRENT , Collector.Characteristics.UNORDERED));
/**CH ID*/
public static final Set CH_ID = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH));
/**CH Unordered ID*/
public static final Set CH_UNORDERED_ID = Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.UNORDERED , Collector.Characteristics.IDENTITY_FINISH));
/**CH NOID*/
public static final Set CH_NOID = Collections.emptySet();
@Override
public Supplier supplier() {
return this.supplier;
}
@Override
public BiConsumer accumulator() {
return this.accumulator;
}
@Override
public BinaryOperator combiner() {
return this.combiner;
}
@Override
public Function finisher() {
return this.finisher;
}
@Override
public Set characteristics() {
return this.characteristics;
}
/**
* builder
* @return {@link CollectorImpl.Builder}
* @param input type
* @param accumulate type
* @param return type
*/
public static final CollectorImpl.Builder builder() {
return new CollectorImpl.Builder();
}
/**
* return type is accumulate type
* @return {@link CollectorImpl.Builder}
* @param input type
* @param accumulate type
*/
public static final CollectorImpl.Builder idBuilder() {
return CollectorImpl.builder()
.withFinisher(Function.identity())
.withCharacteristics(CH_ID);
}
/**
* return type is accumulate type, and it is concurrent mode
* @return {@link CollectorImpl.Builder}
* @param input type
* @param accumulate type
*/
public static final CollectorImpl.Builder idCurrentBuilder() {
return CollectorImpl.builder()
.withFinisher(Function.identity())
.withCharacteristics(CH_CONCURRENT_ID);
}
/**
* {@link CollectorImpl} builder
* @param input type
* @param accumulate type
* @param return type
*/
public static class Builder {
private Supplier supplier;
private BiConsumer accumulator;
private BinaryOperator combiner;
private Function finisher;
private Set characteristics;
/**
* set {@link java.util.stream.Collector.Characteristics}
* @param characteristics {@link java.util.stream.Collector.Characteristics}
* @return {@link Builder}
*/
public Builder withCharacteristics(Set characteristics){
this.characteristics = characteristics;
return this;
}
/**
* set accumulator to result convertor
* @param finisher the convertor
* @return {@link Builder}
*/
public Builder withFinisher(Function finisher){
this.finisher = finisher;
return this;
}
/**
* set accumulator combination
* @param combiner combination function
* @return {@link Builder}
*/
public Builder withCombiner(BinaryOperator combiner){
this.combiner = combiner;
return this;
}
/**
* set accumulator
* @param accumulator accumulated function
* @return {@link Builder}
*/
public Builder withAccumulator(BiConsumer accumulator){
this.accumulator = accumulator;
return this;
}
/**
* build operation
* @return {@link CollectorImpl}
*/
public CollectorImpl build() {
return new CollectorImpl<>(supplier , accumulator , combiner , finisher , characteristics);
}
/**
* set accumulator creator
* @param supplier accumulator creator
* @return {@link Builder}
*/
public Builder withSupplier(Supplier supplier){
this.supplier = supplier;
return this;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy