可以将方法的参数类型改为List<? extends DimServiceDTO>,即使用通配符限定参数类型为DimServiceDTO的子类,从而支持传入任何继承自DimServiceDTO的对象列表。修改后的代码如下:

private List mergeMetrics(List<? extends DimServiceDTO> dimServiceList) { if (CollectionUtils.isEmpty(dimServiceList)) return null;

    List<Map<String, Object>> metricList = ReportCollectBase.queryMetricList(serviceMetricExpressionMap, indicatorService, Arrays.asList("instance", "serviceUrl"));
    Map<String, List<Map<String, Object>>> objectGroup = metricList.stream().collect(Collectors.groupingBy(map -> String.valueOf(map.get("m8_object_id"))));
    List<ServiceMonitorVO> result = new ArrayList<>(dimServiceList.size());
    for (DimServiceDTO dim : dimServiceList) {
        ServiceMonitorVO serviceMonitorVO = new ServiceMonitorVO();
        BeanUtils.copyProperties(dim, serviceMonitorVO);

        if (StringUtils.isEmpty(dim.getM8ObjectUrl())) {
            serviceMonitorVO.setServiceTotal(0);
        } else {
            String[] urls = dim.getM8ObjectUrl().split(",");
            serviceMonitorVO.setServiceTotal(urls.length);
        }
        List<ServiceMonitorVO.ServiceMonitorItemVO> items = new ArrayList<>();
        if (objectGroup == null) {
            serviceMonitorVO.setServiceNormal(0);
            if (StringUtils.isNotEmpty(dim.getM8ObjectUrl())) {
                String[] urls = dim.getM8ObjectUrl().split(",");
                for (String url : urls) {
                    items.add(new ServiceMonitorVO.ServiceMonitorItemVO(url, "0"));
                }
            }
        } else {
            List<Map<String, Object>> list = objectGroup.getOrDefault(dim.getM8ObjectId(), new ArrayList<>());
            String[] urls = dim.getM8ObjectUrl().split(",");
            if (CollectionUtils.isEmpty(list)) {
                serviceMonitorVO.setServiceNormal(0);
                for (String url : urls) {
                    items.add(new ServiceMonitorVO.ServiceMonitorItemVO(url, "0"));
                }
            } else {
                long normal = 0;
                for (String url : urls) {
                    Map<String, Object> obj = list.stream().filter(o -> Objects.equals(o.getOrDefault("serviceUrl", ""), url)).findAny().orElse(null);
                    if (obj == null) {
                        items.add(new ServiceMonitorVO.ServiceMonitorItemVO(url, "0"));
                    } else {
                        String serviceAvailable = String.valueOf(obj.getOrDefault("m8_service_available", "0"));
                        if (Objects.equals(serviceAvailable, "1")) normal++;

                        items.add(new ServiceMonitorVO.ServiceMonitorItemVO(String.valueOf(obj.get("serviceUrl")), serviceAvailable));
                    }
                }
                serviceMonitorVO.setServiceNormal(Integer.parseInt(String.valueOf(normal)));
            }
        }
        // m8JobStatus: 是否启用采集=监控状态
        // m8ServiceState:服务监测状态:0-异常,1-正常(总状态,只要items中有一个正常即正常)
        serviceMonitorVO.setServiceState(serviceMonitorVO.getServiceNormal() > 0 ? "1" : "0");
        serviceMonitorVO.setItems(items);
        result.add(serviceMonitorVO);
    }
    return result;
private ListServiceMonitorVO mergeMetricsListDimServiceDTO dimServiceList if CollectionUtilsisEmptydimServiceList return null; ListMapString Object metricList = ReportCollectBasequeryMe

原文地址: https://www.cveoy.top/t/topic/eF7S 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录