package com.tanpu.community.util;

import com.tanpu.community.dao.entity.community.ThemeEntity;
import org.apache.commons.lang3.StringUtils;

import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class RankUtils {


    /**
     * 根据id排序主题对象(同时去重)
     * @param list 主题
     * @param ids 主题Id,list中可重复
     * @return
     */
    public static List<ThemeEntity> sortThemeEntityByIds(List<ThemeEntity> list, List<String> ids){
        int count=0;
        HashMap<String, Integer> indexMap = new HashMap<>();
        for (String id : ids) {
            //list中出现重复元素时,优化取第一次出现的顺序
            if (!indexMap.containsKey(id)){
                indexMap.put(id,count++);
            }

        }
        List<ThemeEntity> collect = list.stream().filter(o -> indexMap.containsKey(o.getThemeId()))
                .sorted(Comparator.comparingInt(o -> indexMap.get(o.getThemeId())))
                .collect(Collectors.toList());
        return collect;
    }

    /**
     * 根据id排序主题对象(同时过滤权限)
     * @param list
     * @param recmdIds
     * @param topicIds
     * @return
     */
    public static List<ThemeEntity> sortThemeEntityByIds(List<ThemeEntity> list, List<String> recmdIds, Set<String> topicIds){

        List<ThemeEntity> themes = list.stream().filter(o -> {
            if (StringUtils.isBlank(o.getTopicId())) return true;
            return topicIds.contains(o.getTopicId());
        }).collect(Collectors.toList());
        return sortThemeEntityByIds(themes, recmdIds);
    }
}