丁云鹏 1 سال پیش
والد
کامیت
e081874b07

+ 8 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractVideoRecallStrategy.java

@@ -8,9 +8,11 @@ import com.tzld.piaoquan.recommend.server.service.filter.VideoFilterService;
 import com.tzld.piaoquan.recommend.server.service.recall.FilterParamFactory;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallStrategy;
+import com.tzld.piaoquan.recommend.server.util.CommonCollectionUtils;
 import com.tzld.piaoquan.recommend.server.util.JSONUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang.math.NumberUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -45,8 +47,12 @@ public abstract class AbstractVideoRecallStrategy implements RecallStrategy {
         if (StringUtils.isBlank(value)) {
             return null;
         }
-        Map<Long, Double> videoScoreMap = JSONUtils.fromJson(value, new TypeToken<Map<Long, Double>>() {
-        }, Collections.emptyMap());
+        List<List<String>> videoScores = JSONUtils.fromJson(value, new TypeToken<List<List<String>>>() {
+        }, Collections.emptyList());
+
+
+        Map<Long, Double> videoScoreMap = CommonCollectionUtils.toMap(videoScores, v -> NumberUtils.toLong(v.get(0)),
+                v -> NumberUtils.toDouble(v.get(1)));
         List<Video> results = new ArrayList<>();
 
         FilterResult filterResult = filterService.filter(FilterParamFactory.create(param, Lists.newArrayList(videoScoreMap.keySet())));

+ 10 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/util/CommonCollectionUtils.java

@@ -4,6 +4,7 @@ import org.apache.commons.collections4.CollectionUtils;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -11,10 +12,17 @@ import java.util.stream.Collectors;
  * @author dyp
  */
 public class CommonCollectionUtils {
-    public static <T, R> List<R> toList(List<T> list, Function<T, R> map){
-        if(CollectionUtils.isEmpty(list)){
+    public static <T, R> List<R> toList(List<T> list, Function<T, R> map) {
+        if (CollectionUtils.isEmpty(list)) {
             return Collections.emptyList();
         }
         return list.stream().map(map).collect(Collectors.toList());
     }
+
+    public static <T, K, V> Map<K, V> toMap(List<T> list, Function<T, K> keyFunc, Function<T, V> valueFunc) {
+        if (CollectionUtils.isEmpty(list)) {
+            return Collections.emptyMap();
+        }
+        return list.stream().collect(Collectors.toMap(keyFunc::apply, valueFunc::apply));
+    }
 }