zoukankan      html  css  js  c++  java
  • java多线程中ArrayList应当替换为CopyOnWriteArrayList

    @ApiOperation(value = "获取子公司sub,省分prov,总部hq, 全部 total  指标值中的 最高分,最低分,平均分")
        @RequestMapping(value = "/getMaxAndMinAndAverageKpiValue", method = RequestMethod.POST)
        private Map<String, Object> getMaxAndMinAndAverageKpiValue(@RequestBody KpiStatisticsReq req) {
            if (req.getKpiIds() == null) {
                return ResponseUtil.fail("请输入 kpi指标的kpiId数组");
            }
            try {
                List<HashMap<String, Object>> list = new CopyOnWriteArrayList();
    
                if (req.getBranch() == null) {
                    req.setBranch("total");
                }
                 List<String> ldapOrgCodesList1 = soaOrgWithPathBranchServiceImpl.queryLdapOrgCodesByBranch(req.getBranch());
                List<String> ldapOrgCodesList2= new ArrayList<>();
                ldapOrgCodesList2.addAll(ldapOrgCodesList1);
                if (req.getLdapOrgCodes()!=null){
                    ldapOrgCodesList2.addAll(Arrays.asList(req.getLdapOrgCodes()));
                }
                final List<String> ldapOrgCodesList=ldapOrgCodesList2.stream().distinct().collect(Collectors.toList());
    
                ForkJoinPool forkJoinPool = new ForkJoinPool();
                for (Integer kpiId : req.getKpiIds()) {
                    forkJoinPool.execute(() -> {
                        Kpi kpi = kpiServiceImpl.queryInfoByNatrualKey(kpiId);
                        // 获取 子公司编码 ldap code
                        HashMap<String, Object> datas = new HashMap<>();
                        datas.put("kpi", kpi);
                        // List<KpiValue> appKpiListAll = new ArrayList<>();
                        List<Double> doubles = new ArrayList<>();
                        KpiValue appKpiParam = new KpiValue();
                        for (String scope : ldapOrgCodesList) {
                            appKpiParam.setScope(scope);
                            appKpiParam.setKpiId(kpiId);
                            // List<KpiValue> appKpiList = kpiValueService.searchInfos(appKpiParam);
                            KpiValue kpiValue = kpiValueService.searchOne(appKpiParam);
                            if (kpiValue != null && kpiValue.getValue() != null && !kpiValue.getValue().trim().equals("")) {
                                // doubles.add(Double.parseDouble(kpiValue.getValue()));
                                doubles.add(new BigDecimal(kpiValue.getValue()).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
                            }
                        }
                        if (doubles.size() > 0) {
                            DoubleSummaryStatistics statistics = doubles.stream().mapToDouble(x -> x).summaryStatistics();
                            datas.put("max", BigDecimal.valueOf(statistics.getMax()).setScale(4, BigDecimal.ROUND_HALF_UP));
                            datas.put("min", BigDecimal.valueOf(statistics.getMin()).setScale(4, BigDecimal.ROUND_HALF_UP));
                            datas.put("average", BigDecimal.valueOf(statistics.getAverage()).setScale(4, BigDecimal.ROUND_HALF_UP));
                            datas.put("sum", BigDecimal.valueOf(statistics.getSum()).setScale(4, BigDecimal.ROUND_HALF_UP));
                            datas.put("count", statistics.getCount());
                        }
                        list.add(datas);
                    });
                }
                while (forkJoinPool.getActiveThreadCount() != 0) {
                    Thread.sleep(100);
                }
                forkJoinPool.shutdown();
                return ResponseUtil.ok(list);
            } catch (Exception e) {
                e.printStackTrace();
                LoggerUtils.error(getClass(), "查询失败!" + e.getMessage());
                return ResponseUtil.fail("查询失败!" + e.getMessage());
            }
        }
  • 相关阅读:
    博客园的使用和设置
    关于递推算法求解约瑟夫环问题P(n,m,k,s)
    HTML超链接和路径
    HTML文本元素标签
    HTML前序
    Java正则表达式验证至少6位表达式中至少包含数字大小写字母中的一种
    创建自己的第一个Vue项目
    查看端口及进程
    Java读取数据库(Oracle,MySQL,PostgresSQL)表信息以及字段信息生成Word文档
    启动项目报错ORA-12505, TNS:listener does not currently know of SID given in
  • 原文地址:https://www.cnblogs.com/huanglei2010/p/11955596.html
Copyright © 2011-2022 走看看