|
@@ -3,9 +3,11 @@ package com.tzld.piaoquan.recommend.server.service.rank.processor;
|
|
|
import com.tzld.piaoquan.recommend.server.model.Video;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
|
|
|
import com.tzld.piaoquan.recommend.server.util.MathUtil;
|
|
|
+import com.tzld.piaoquan.recommend.server.util.WeightRandom;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -44,9 +46,15 @@ public class RankProcessorInsert {
|
|
|
}
|
|
|
|
|
|
// 获取需要插入的视频
|
|
|
- Video insertTagVideo = rovList.stream()
|
|
|
- .filter(video -> video.getTags().contains(finalTagName))
|
|
|
- .findFirst().orElse(null);
|
|
|
+ Video insertTagVideo = null;
|
|
|
+ int tagVideoIndex = -1;
|
|
|
+ for (int i = 0; i < rovList.size(); i++) {
|
|
|
+ if (rovList.get(i).getTags().contains(finalTagName)) {
|
|
|
+ insertTagVideo = rovList.get(i);
|
|
|
+ tagVideoIndex = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
if (insertTagVideo == null) {
|
|
|
return;
|
|
|
}
|
|
@@ -56,15 +64,30 @@ public class RankProcessorInsert {
|
|
|
List<Double> insertWeightList = Arrays.stream(insertWeight)
|
|
|
.map(Double::valueOf).collect(Collectors.toList());
|
|
|
|
|
|
- // 遍历权重,随机插入
|
|
|
- for (int i = 0; i < insertWeightList.size(); i++) {
|
|
|
- double probability = insertWeightList.get(i);
|
|
|
- double randomDouble = MathUtil.nextDouble(0, 1);
|
|
|
- if (randomDouble <= probability) {
|
|
|
- rovList.add(i, insertTagVideo);
|
|
|
- break;
|
|
|
- }
|
|
|
+ if (CollectionUtils.size(insertWeightList) != 5) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Double showProbability = insertWeightList.get(0);
|
|
|
+ double randomDouble = MathUtil.nextDouble(0, 1);
|
|
|
+ if (randomDouble > showProbability) {
|
|
|
+ // 没有命中强插规则
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 遍历权重,获取插入位置
|
|
|
+ List<WeightRandom.ItemWithWeight<Integer>> items = new ArrayList<>(insertWeightList.size());
|
|
|
+ for (int i = 1; i < insertWeightList.size(); i++) {
|
|
|
+ WeightRandom.ItemWithWeight<Integer> itemWithWeight = new WeightRandom.ItemWithWeight<>(i, insertWeightList.get(i));
|
|
|
+ items.add(itemWithWeight);
|
|
|
+ }
|
|
|
+ WeightRandom<Integer> integerWeightRandom = new WeightRandom<>(items);
|
|
|
+ Integer insertIndex = integerWeightRandom.choose();
|
|
|
+ if (insertIndex == null) {
|
|
|
+ return;
|
|
|
}
|
|
|
+ // 删除原视频
|
|
|
+ rovList.remove(tagVideoIndex);
|
|
|
+ // 插入该视频到指定位置
|
|
|
+ rovList.add(insertIndex - 1, insertTagVideo);
|
|
|
|
|
|
}
|
|
|
|