美文网首页
Stream遍历和分组工具

Stream遍历和分组工具

作者: Rain_z | 来源:发表于2021-10-09 16:26 被阅读0次
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);
        }
    }

相关文章

网友评论

      本文标题:Stream遍历和分组工具

      本文链接:https://www.haomeiwen.com/subject/vpbqoltx.html