Stream遍历和分组工具

1.使用group分组key值为空时触发异常,但是有时又需要对包含空数据的集合进行分组,空值数据分为一组。
/**
     * 键值含有null的数据分组
     *
     * @param classifier            键值
     * @param <T>                   函数输入类型
     * @param <A>                   函数结果类型
     * @return                      组数据
     */
    public static <T, A> Collector<T, ?, Map<A, List<T>>> groupByWithNullKeys(Function<? super T, ? extends A> classifier) {
        return Collectors.toMap(
                classifier,
                Collections::singletonList,
                (List<T> oldList, List<T> newEl) -> {
                    List<T> newList = new ArrayList<>(oldList.size() + 1);
                    newList.addAll(oldList);
                    newList.addAll(newEl);
                    return newList;
                }
        );
    }

2.使用流处理数据循环遍历时,如果判断循环次数执行响应的逻辑,可以用下面方法替换forEach方法

/**
     *集合遍历
     *
     * @param startIndex            起始索引
     * @param elements              遍历的集合
     * @param action                BiConsumer类型的处理器
     * @param <T>                   泛型
     */
    public static <T> void forEach(int startIndex,Iterable<? extends T> elements, BiConsumer<Integer, ? super T> action) {
        Objects.requireNonNull(elements);
        Objects.requireNonNull(action);
        if(startIndex < 0) {
            startIndex = 0;
        }
        int index = 0;
        for (T element : elements) {
            index++;
            if(index <= startIndex) {
                continue;
            }

            action.accept(index-1, element);
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容