723d405865dbcbc2427591229b83db46083b5fb5.svn-base 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package cn.com.goldenwater.dcproj.utils;
  2. import java.util.List;
  3. import java.util.stream.Collectors;
  4. import java.util.stream.Stream;
  5. public class ListUtil {
  6. private static final Integer DEFAULT_MAX_SEND = 1000;
  7. public static <T> List<List<T>> partition(List<T> list) {
  8. return partition(list, DEFAULT_MAX_SEND);
  9. }
  10. public static <T> List<List<T>> partition(List<T> list, int maxSend) {
  11. int limit = countStep(list.size(), maxSend);
  12. //方法一:使用流遍历操作
  13. // List<List<T>> mglist = new ArrayList<>();
  14. // Stream.iterate(0, n -> n + 1).limit(limit).forEach(i -> {
  15. // mglist.add(list.stream().skip(i * maxSend).limit(maxSend).collect(Collectors.toList()));
  16. // });
  17. //
  18. // return mglist;
  19. // 方法二:获取分割后的集合
  20. return Stream.iterate(0, n -> n + 1)
  21. .limit(limit)
  22. .parallel()
  23. .map(a -> list.stream()
  24. .skip(a * maxSend)
  25. .limit(maxSend)
  26. .parallel()
  27. .collect(Collectors.toList()))
  28. .collect(Collectors.toList());
  29. }
  30. /**
  31. * 计算切分次数
  32. */
  33. private static Integer countStep(Integer size, int maxSend) {
  34. return (size + maxSend - 1) / maxSend;
  35. }
  36. }