使用stream流实现的List工具类

:工具升级为SplitUtil,建议使用这个:Java分页、集合拆分、分批多线程执行工具类SplitUtil

理由:
1、很多第三方工具库均有ListUtil工具类,重名且功能更丰富
2、原先写这个工具类的初衷大部分是为了partition这个方法,也就是对一个list进行拆分并进行后续处理,现对这个操作进行了封装增强

原始代码:

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 使用stream流实现的List工具类
 */
public class ListUtil {

    /**
     * 集合拆分
     *
     * @param collection 原始集合
     * @param size       子集合长度
     * @param <T>
     * @return
     */
    public static <T> List<List<T>> partition(Collection<T> collection, int size) {
        if (size <= 0) {
            throw new IllegalArgumentException("size must be greater than 0");
        }
        List<T> list = toArrayList(collection);
        //计算可以拆分成几个list
        int count = (int) Math.ceil(list.size() / (double) size);
        //使用流进行拆分
        return Stream.iterate(0, n -> n + 1).limit(count).map(
                i -> list.stream().skip((long) i * size).limit(size).collect(Collectors.toList())
        ).collect(Collectors.toList());
    }

    /**
     * 对List分页取值(页码从1开始)
     *
     * @param list
     * @param pageNum
     * @param pageSize
     * @param <T>
     * @return
     */
    public static <T> List<T> page(List<T> list, int pageNum, int pageSize) {
        if (pageNum <= 0 || pageSize <= 0) {
            throw new IllegalArgumentException("pageNum or pageSize must be greater than 0");
        }
        //使用流进行分页取值
        return list.stream()
                .skip((long) (pageNum - 1) * pageSize)
                .limit(pageSize)
                .collect(Collectors.toList());
    }

    /**
     * 对List进行截取
     *
     * @param list
     * @param start
     * @param end
     * @param <T>
     * @return
     */
    public static <T> List<T> sub(List<T> list, int start, int end) {
        start = Math.max(start, 0);
        end = Math.max(end, 0);
        //使用流进行截取
        return list.stream()
                .skip(start)
                .limit(end - start)
                .collect(Collectors.toList());
    }

    /**
     * 集合转成ArrayList
     *
     * @param collection
     * @param <T>
     * @return
     */
    public static <T> List<T> toArrayList(Collection<T> collection) {
        return collection == null ? new ArrayList<>() : new ArrayList<>(collection);
    }

}

觉得内容还不错?打赏个钢镚鼓励鼓励!!👍