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

com.star.collection.iter.IterUtil Maven / Gradle / Ivy

The newest version!
package com.star.collection.iter;

import com.star.collection.map.MapUtil;
import com.star.string.StringUtil;

import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.StringJoiner;

/**
 * 迭代器工具类
 *
 * @author starhq
 */
public final class IterUtil {

    private IterUtil() {
    }

    /**
     * 迭代器是否为空
     *
     * @param iterator 迭代器
     * @return 是否为空
     */
    public static boolean isEmpty(final Iterator iterator) {
        return Objects.isNull(iterator) || !iterator.hasNext();
    }

    /**
     * iterable是否为空
     *
     * @param iterable iterable对象
     * @return 是否为空
     */
    public static boolean isEmpty(final Iterable iterable) {
        return Objects.isNull(iterable) || isEmpty(iterable.iterator());
    }

    /**
     * 获取iterable中元素出现的次数
     *
     * @param iterable iterable
     * @param       泛型
     * @return 元素为key,次数为value的Map
     */
    public static  Map countMap(final Iterable iterable) {
        return Objects.isNull(iterable) ? Collections.emptyMap() : countMap(iterable.iterator());
    }

    /**
     * 获取迭代器中元素出现的次数
     *
     * @param iterator 迭代器
     * @param       泛型
     * @return 元素为key,次数为value的Map
     */
    public static  Map countMap(final Iterator iterator) {
        final Map countMap = MapUtil.newHashMap();
        if (!isEmpty(iterator)) {
            Integer count;
            T instance;
            while (iterator.hasNext()) {
                instance = iterator.next();
                count = countMap.get(instance);
                if (Objects.isNull(count)) {
                    countMap.put(instance, 1);
                } else {
                    countMap.put(instance, count + 1);
                }
            }
        }
        return countMap;
    }

    /**
     * 把迭代器转换成字符串
     *
     * @param iterator  迭代器
     * @param delimiter 分隔符
     * @param        泛型
     * @return 封装好的字符串
     */
    public static  String join(final Iterator iterator, final String delimiter) {
        String result;
        if (isEmpty(iterator)) {
            result = StringUtil.EMPTY;
        } else {
            final StringJoiner joiner = StringUtil.joiner(StringUtil.EMPTY, StringUtil.EMPTY, delimiter);
            Object obj;
            while (iterator.hasNext()) {
                obj = iterator.next();
                joiner.add(StringUtil.str(obj));
            }
            result = joiner.toString();
        }
        return result;
    }

    /**
     * 把iterable转换成字符串
     *
     * @param iterable  迭代器
     * @param delimiter 分隔符
     * @param        泛型
     * @return 封装好的字符串
     */
    public static  String join(final Iterable iterable, final String delimiter) {
        return Objects.isNull(iterable) ? StringUtil.EMPTY : join(iterable.iterator(), delimiter);
    }

    /**
     * 获取迭代器中的元素类型
     *
     * @param iterator 迭代器
     * @return 元素类型
     */
    public static Optional> getElementType(final Iterator iterator) {
        Optional> result = Optional.empty();
        if (!isEmpty(iterator)) {
            Object obj;
            while (iterator.hasNext()) {
                obj = iterator.next();
                if (!Objects.isNull(obj)) {
                    result = Optional.of(obj.getClass());
                    break;
                }
            }
        }
        return result;
    }

    /**
     * 获取iterable中的元素类型
     *
     * @param iterable 迭代器
     * @return 元素类型
     */
    public static Optional> getElementType(final Iterable iterable) {
        return Objects.isNull(iterable) ? Optional.empty() : getElementType(iterable.iterator());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy