All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.stream.SimpleCollector Maven / Gradle / Ivy

Go to download

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

There is a newer version: 5.8.34
Show newest version
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