List 切割

835 阅读1分钟

在日常工作中我们都会遇到将数据进行分组的需求

  • 那么在Java 中如何将简单又方便的将list集合进行分组呢?
  • 在java8特性中我们可以使用stream流很方便的对集合进行操作

原始方法分组

	public static <T> List<List<T>> split(List<T> collection, int size) {
		final List<List<T>> result = new ArrayList<>();
		if (CollUtil.isEmpty(collection)) {
			return result;
		}

		ArrayList<T> subList = new ArrayList<>(size);
		for (T t : collection) {
			if (subList.size() >= size) {
				result.add(subList);
				subList = new ArrayList<>(size);
			}
			subList.add(t);
		}
		result.add(subList);
		return result;
	}
public static <T> List<List<T>> splistList(List<T> list, int group) {
		List<List<T>> lists = new ArrayList<List<T>>();
		if (CollectionUtils.isEmpty(list)) {
			return lists;
		}

		int length = list.size();

		int number = length % group == 0 ? (length / group) : (length / group + 1);

		for (int index = 0; index < number; index++) {

			List<T> targetList = list.subList(index * group,
					(index + 1) * group > length ? length : (index + 1) * group);

			lists.add(targetList);

		}
		return lists;

	}

使用hutool 切割

1.导入pom文件

    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>4.5.11</version>
     </dependency>

2.测试

public static void main(String[] args){
		List<String> list = Arrays.asList("a", "b", "c");
		// 用指定字符分割集合
		List<List<String>> join = CollUtil.split(list, 1);
		System.out.println(JSON.toJSONString(join));
	}

流切割

 public static <T> List<List<T>> partition( List<T> list,  int size) {
 
        Integer limit = (list.size() + size - 1) / size;
        
        List<List<T>> mglist = new ArrayList<List<T>>();
        
        Stream.iterate(0, n -> n + 1).limit(limit).forEach(i -> {
            mglist.add(list.stream().skip(i * size).limit(size).collect(Collectors.toList()));
        });
        
        return mglist;
    }