cn.hutool.core.stream.CollectorUtil 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 cn.hutool.core.lang.Opt;
import cn.hutool.core.util.StrUtil;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringJoiner;
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;
import java.util.stream.Collectors;
/**
* 可变的汇聚操作{@link Collector} 相关工具封装
*
* @author looly, VampireAchao
* @since 5.6.7
*/
public class CollectorUtil {
/**
* 说明已包含IDENTITY_FINISH特征 为 Characteristics.IDENTITY_FINISH 的缩写
*/
public static final Set CH_ID
= Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH));
/**
* 说明不包含IDENTITY_FINISH特征
*/
public static final Set CH_NOID = Collections.emptySet();
/**
* 提供任意对象的Join操作的{@link Collector}实现,对象默认调用toString方法
*
* @param delimiter 分隔符
* @param 对象类型
* @return {@link Collector}
*/
public static Collector joining(CharSequence delimiter) {
return joining(delimiter, Object::toString);
}
/**
* 提供任意对象的Join操作的{@link Collector}实现
*
* @param delimiter 分隔符
* @param toStringFunc 自定义指定对象转换为字符串的方法
* @param 对象类型
* @return {@link Collector}
*/
public static Collector joining(CharSequence delimiter,
Function toStringFunc) {
return joining(delimiter, StrUtil.EMPTY, StrUtil.EMPTY, toStringFunc);
}
/**
* 提供任意对象的Join操作的{@link Collector}实现
*
* @param delimiter 分隔符
* @param prefix 前缀
* @param suffix 后缀
* @param toStringFunc 自定义指定对象转换为字符串的方法
* @param 对象类型
* @return {@link Collector}
*/
public static Collector joining(CharSequence delimiter,
CharSequence prefix,
CharSequence suffix,
Function toStringFunc) {
return new SimpleCollector<>(
() -> new StringJoiner(delimiter, prefix, suffix),
(joiner, ele) -> joiner.add(toStringFunc.apply(ele)),
StringJoiner::merge,
StringJoiner::toString,
Collections.emptySet()
);
}
/**
* 提供对null值友好的groupingBy操作的{@link Collector}实现,可指定map类型
*
* @param classifier 分组依据
* @param mapFactory 提供的map
* @param downstream 下游操作
* @param 实体类型
* @param 实体中的分组依据对应类型,也是Map中key的类型
* @param 下游操作对应返回类型,也是Map中value的类型
* @param 下游操作在进行中间操作时对应类型
* @param 最后返回结果Map类型
* @return {@link Collector}
*/
public static > Collector groupingBy(Function super T, ? extends K> classifier,
Supplier mapFactory,
Collector super T, A, D> downstream) {
final Supplier downstreamSupplier = downstream.supplier();
final BiConsumer downstreamAccumulator = downstream.accumulator();
final BiConsumer
© 2015 - 2024 Weber Informatics LLC | Privacy Policy