一个按权重(weight)进行LB的算法
发布时间:2020-12-15 07:53:50 所属栏目:Java 来源:网络整理
导读:? package netty; import com.google.common.collect.ImmutableList; import lombok.SneakyThrows; import java.util.List; import java.util.Objects; import java.util.Random; /** * Test * * @author xfyou */ public class Test { @SneakyThrows public
? package netty; import com.google.common.collect.ImmutableList; import lombok.SneakyThrows; import java.util.List; import java.util.Objects; import java.util.Random; /** * Test * * @author xfyou */ public class Test { @SneakyThrows public static void main(String[] args) { List<Integer> weightList = ImmutableList.of(0,0); boolean allHaveTheSameWeight = isSameWeight(weightList); if (!allHaveTheSameWeight) { selectOneByWeight(weightList); } else { selectOneRandom(weightList); } } /** * 如果所有的权重都是一样的,则随机选择一个 */ private static void selectOneRandom(List<Integer> weightList) { System.out.println("selecded list index:" + new Random().nextInt(weightList.size())); } /** * 如果所有的权重不一样,则优化选择权重高的 */ private static void selectOneByWeight(List<Integer> weightList) { int offset = new Random().nextInt(weightList.stream().mapToInt(i -> i).sum()); for (int i = 0,len = weightList.size(); i < len; i++) { offset -= weightList.get(i); if (offset < 0) { System.out.println("selected weight:" + weightList.get(i) + ",selected index:" + i); break; } } } /** * 判断所有的权重是否一样 */ private static boolean isSameWeight(List weightList) { boolean allHaveTheSameWeight = true; for (int i = 0,len = weightList.size(); i < len; i++) { if (i > 0) { if (!Objects.equals(weightList.get(i),weightList.get(i - 1))) { allHaveTheSameWeight = false; break; } } } return allHaveTheSameWeight; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |