diff --git a/services/ad-platform-service/src/main/java/com/baiye/service/AssignDataService.java b/services/ad-platform-service/src/main/java/com/baiye/service/AssignDataService.java index cde0dc85..261bec25 100644 --- a/services/ad-platform-service/src/main/java/com/baiye/service/AssignDataService.java +++ b/services/ad-platform-service/src/main/java/com/baiye/service/AssignDataService.java @@ -1,5 +1,6 @@ package com.baiye.service; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; import com.baiye.constant.DefaultNumberConstants; @@ -16,7 +17,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; /** @@ -31,14 +31,13 @@ public class AssignDataService { int size = distribution.getDeptIds().size(); List deptIds = distribution.getDeptIds(); List weights = distribution.getWeights(); - CopyOnWriteArrayList resourceList = - Lists.newCopyOnWriteArrayList(distribution.getResourceList()); + List resourceList = distribution.getResourceList(); // 数据打乱 Collections.shuffle(resourceList); // 去除重复数据 - CopyOnWriteArrayList copyOnWriteArrayList = - Lists.newCopyOnWriteArrayList(Sets.newHashSet(resourceList)); - int resourceSize = copyOnWriteArrayList.size(); + List arrayList = + Lists.newArrayList(Sets.newHashSet(resourceList)); + int resourceSize = arrayList.size(); // 集合求和 double sum = weights.stream().mapToDouble(Double::doubleValue).sum(); if (sum != DefaultNumberConstants.ONE_HUNDRED) { @@ -48,7 +47,7 @@ public class AssignDataService { Map deptMap = deptIds.stream().collect(Collectors.toMap(key -> key, key -> weights.get(deptIds.indexOf(key)))); Map longDoubleMap = MapUtil.sortByValue(deptMap, Boolean.FALSE); - CopyOnWriteArrayList value; + List value; List list = new ArrayList<>(); DistributeResponseDTO distributeResponseDTO; int num = DefaultNumberConstants.ZERO_NUMBER; @@ -62,22 +61,25 @@ public class AssignDataService { Double.valueOf(DefaultNumberConstants.ONE_HUNDRED), DefaultNumberConstants.TWO_HUNDRED); int count = (int) Math.floor(NumberUtil.mul(resourceSize, div)); if (count == DefaultNumberConstants.ONE_NUMBER) { - int middle = copyOnWriteArrayList.size() / DefaultNumberConstants.TWO_NUMBER; - value = Lists.newCopyOnWriteArrayList(Lists.newArrayList(copyOnWriteArrayList.get(middle))); + int middle = arrayList.size() / DefaultNumberConstants.TWO_NUMBER; + value = Lists.newArrayList(arrayList.get(middle)); distributeResponseDTO.setResponseList(value); distributeResponseDTO.setDeptId(key); list.add(distributeResponseDTO); - copyOnWriteArrayList.remove(middle); + // copyOnWriteArrayList.remove(middle); + arrayList = CollUtil.subtractToList(arrayList, value); continue; } - value = Lists.newCopyOnWriteArrayList - (copyOnWriteArrayList.subList(DefaultNumberConstants.ZERO_NUMBER, count)); + value = Lists.newArrayList + (arrayList.subList(DefaultNumberConstants.ZERO_NUMBER, count)); distributeResponseDTO.setResponseList(value); distributeResponseDTO.setDeptId(key); list.add(distributeResponseDTO); - copyOnWriteArrayList.removeAll(value); + // 并集方式删除元素 + arrayList = CollUtil.subtractToList(arrayList, value); + // copyOnWriteArrayList.removeAll(value); } else { - value = Lists.newCopyOnWriteArrayList(Lists.newArrayList(copyOnWriteArrayList)); + value = Lists.newCopyOnWriteArrayList(Lists.newArrayList(arrayList)); distributeResponseDTO.setResponseList(value); distributeResponseDTO.setDeptId(longDoubleEntry.getKey()); list.add(distributeResponseDTO); diff --git a/services/ad-platform-service/src/test/java/com/baiye/SettingTest.java b/services/ad-platform-service/src/test/java/com/baiye/SettingTest.java index 2f71238d..f1e89c0e 100644 --- a/services/ad-platform-service/src/test/java/com/baiye/SettingTest.java +++ b/services/ad-platform-service/src/test/java/com/baiye/SettingTest.java @@ -36,7 +36,7 @@ public class SettingTest { List strings = Lists.newArrayList("a", "b", "c", "d","e","f","g","h","i","j"); List longs = Lists.newArrayList(12360L, 12361L,12362L,12363L,12364L,12365L); - List doubleList = Lists.newArrayList(40.0, 20.0,10.0,15.0,10.0,5.0); + List doubleList = Lists.newArrayList(16.66, 16.66,16.66,16.66,16.66,16.7); distributeDTO.setResourceList(strings); distributeDTO.setWeights(doubleList); distributeDTO.setDeptIds(longs);