三木猿 发表于 2020-9-7 10:59

分割map和分割list的通用方法

    /**
   * 描述:分割Map
   * @Param map 原始数据
   * @param pageSize 每个map数量
   * @Return ListList<Map<K, V>>
   *
   */
    public static <K, V> List<Map<K, V>> splitMap(Map<K, V> map, int pageSize) {
      if (map == null || map.isEmpty()) {
            return Collections.emptyList();
      }
      pageSize = pageSize == 0 ? 10000 : pageSize;
      List<Map<K, V>> newList = new ArrayList<>();
      int j = 0;
      for (K k : map.keySet()) {
            if (j % pageSize == 0) {
                newList.add(new HashMap<>());
            }
            newList.get(newList.size() - 1).put(k, map.get(k));
            j++;
      }
      return newList;
    }
public static <T> Map<Integer, List<T>> splitList(List<T> t, int num) {
      Map<Integer, List<T>> subList = new HashMap<>(num);
      int num1 = (int) Math.floor(t.size() / num);
      for (int i = 0; i < num; i++) {
            subList.put(i, t.subList(i * num1, (i + 1) * num1));
            if (i == num - 1) {
                subList.put(i, t.subList(i * num1, t.size()));
            }
      }
      return subList;
    }

三木猿 发表于 2020-9-7 11:03

分割出来的样子,list有91条数据且num=3,则分割出来3个list,前两个list有30条数据,最后一个有31条

剑龙传说 发表于 2020-9-7 11:31

楼主不错,虽然我觉得很厉害,但是我相信我能做出来

1281407155 发表于 2020-9-7 12:58

com.google.common.collect.Lists参考下,谷歌的轮子已经实现了

三木猿 发表于 2020-9-7 13:04

1281407155 发表于 2020-9-7 12:58
com.google.common.collect.Lists参考下,谷歌的轮子已经实现了

感谢告知,我去试试

三木猿 发表于 2020-9-7 13:22

1281407155 发表于 2020-9-7 12:58
com.google.common.collect.Lists参考下,谷歌的轮子已经实现了

我看了下,谷歌那个这个是不一样的,谷歌的partition方法是指定一个list有多少数据,我这个是拆分为几个list,应用场景不一样的
页: [1]
查看完整版本: 分割map和分割list的通用方法