cn.hutool.core.stream.SimpleCollector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hutool-all Show documentation
Show all versions of hutool-all Show documentation
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
package cn.hutool.core.stream;
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;
/**
* 简单{@link Collector}接口实现
*
* @param 输入数据类型
* @param 累积结果的容器类型
* @param 数据结果类型
* @since 5.6.7
*/
public class SimpleCollector implements Collector {
/**
* 创建新的结果容器,容器类型为A
*/
private final Supplier supplier;
/**
* 将输入元素合并到结果容器中
*/
private final BiConsumer accumulator;
/**
* 合并两个结果容器(并行流使用,将多个线程产生的结果容器合并)
*/
private final BinaryOperator combiner;
/**
* 将结果容器转换成最终的表示
*/
private final Function finisher;
/**
* 特征值枚举,见{@link Characteristics}
*
* - CONCURRENT: 表示结果容器只有一个(即使是在并行流的情况下)。
* 只有在并行流且收集器不具备此特性的情况下,combiner()返回的lambda表达式才会执行(中间结果容器只有一个就无需合并)。
* 设置此特性时意味着多个线程可以对同一个结果容器调用,因此结果容器必须是线程安全的。
* - UNORDERED: 表示流中的元素无序
* - IDENTITY_FINISH:表示中间结果容器类型与最终结果类型一致。设置此特性时finisher()方法不会被调用
*
*/
private final Set characteristics;
/**
* 构造
*
* @param supplier 创建新的结果容器函数
* @param accumulator 将输入元素合并到结果容器中函数
* @param combiner 合并两个结果容器函数(并行流使用,将多个线程产生的结果容器合并)
* @param finisher 将结果容器转换成最终的表示函数
* @param characteristics 特征值枚举
*/
public SimpleCollector(Supplier supplier,
BiConsumer accumulator,
BinaryOperator combiner,
Function finisher,
Set characteristics) {
this.supplier = supplier;
this.accumulator = accumulator;
this.combiner = combiner;
this.finisher = finisher;
this.characteristics = characteristics;
}
/**
* 构造
*
* @param supplier 创建新的结果容器函数
* @param accumulator 将输入元素合并到结果容器中函数
* @param combiner 合并两个结果容器函数(并行流使用,将多个线程产生的结果容器合并)
* @param characteristics 特征值枚举
*/
@SuppressWarnings("unchecked")
public SimpleCollector(Supplier supplier,
BiConsumer accumulator,
BinaryOperator combiner,
Set characteristics) {
this(supplier, accumulator, combiner, i -> (R) i, characteristics);
}
@Override
public BiConsumer accumulator() {
return accumulator;
}
@Override
public Supplier supplier() {
return supplier;
}
@Override
public BinaryOperator combiner() {
return combiner;
}
@Override
public Function finisher() {
return finisher;
}
@Override
public Set characteristics() {
return characteristics;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy