栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java8 stream 分批处理大数据集

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java8 stream 分批处理大数据集

    public static void testHandler分批处理集合() {
    //业务数据
    List  dataList=new ArrayList<>();
    for (int i = 0; i < 100000; i++) {
      dataList.add(i+"");
    }
    int total = dataList.size();
    // 每次分批处理个数
    int num=500;
    long startTime = System.currentTimeMillis();
    List result=new ArrayList<>();
    // 数据量大于500 进行分批,小于等于则不用分批执行
    if (total > 500) {
      try {
        result = Stream.iterate(0, i -> i + 1).limit(dataList.size() / num + 1).parallel().map(i -> {
          //获取每一批的数据
          List perList = dataList.parallelStream().skip(i * num)
              .limit(num)
              .collect(Collectors.toList());
          //业务处理
          return  queryThisData(perList,i);
        }).filter(o -> Objects.nonNull(o))
            .flatMap(Collection::parallelStream)
            .collect(Collectors.toList());
      } catch (Exception e) {
        e.printStackTrace();
      }
    } else {
      result = queryThisData(dataList, total);
    }


    long endTime = System.currentTimeMillis();
    System.out.println("并发批量处理耗时:"+(endTime-startTime)+" 数据总数:"+result.size());

    //不并发分批
    List result2=new ArrayList<>();
    List> parList=new ArrayList<>();
    int size = dataList.size() % num == 0 ? (dataList.size() / num) : (dataList.size() / num + 1);
    for (int i = 0; i < size ; i++) {
      List list=new ArrayList<>();
      for (int j=i*num;j queryThisData(List perList,int i) {
    try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return perList;
  }

并发批量处理耗时:3190 数据总数:100000
不并发批量处理耗时:21892 数据总数:100000
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号