RankUtils.java 1.66 KB
Newer Older
刘基明's avatar
刘基明 committed
1 2
package com.tanpu.community.util;

刘基明's avatar
刘基明 committed
3
import com.tanpu.community.dao.entity.community.ThemeEntity;
刘基明's avatar
刘基明 committed
4
import org.apache.commons.lang3.StringUtils;
刘基明's avatar
刘基明 committed
5

刘基明's avatar
刘基明 committed
6
import java.util.Comparator;
刘基明's avatar
刘基明 committed
7 8
import java.util.HashMap;
import java.util.List;
刘基明's avatar
刘基明 committed
9
import java.util.Set;
刘基明's avatar
刘基明 committed
10
import java.util.stream.Collectors;
刘基明's avatar
刘基明 committed
11

刘基明's avatar
刘基明 committed
12
public class RankUtils {
刘基明's avatar
刘基明 committed
13 14


刘基明's avatar
刘基明 committed
15
    /**
刘基明's avatar
刘基明 committed
16
     * 根据id排序主题对象(同时去重)
刘基明's avatar
刘基明 committed
17 18 19 20
     * @param list 主题
     * @param ids 主题Id,list中可重复
     * @return
     */
刘基明's avatar
刘基明 committed
21
    public static List<ThemeEntity> sortThemeEntityByIds(List<ThemeEntity> list, List<String> ids){
刘基明's avatar
刘基明 committed
22 23 24
        int count=0;
        HashMap<String, Integer> indexMap = new HashMap<>();
        for (String id : ids) {
刘基明's avatar
刘基明 committed
25 26 27 28 29
            //list中出现重复元素时,优化取第一次出现的顺序
            if (!indexMap.containsKey(id)){
                indexMap.put(id,count++);
            }

刘基明's avatar
刘基明 committed
30
        }
刘基明's avatar
刘基明 committed
31 32 33 34
        List<ThemeEntity> collect = list.stream().filter(o -> indexMap.containsKey(o.getThemeId()))
                .sorted(Comparator.comparingInt(o -> indexMap.get(o.getThemeId())))
                .collect(Collectors.toList());
        return collect;
刘基明's avatar
刘基明 committed
35
    }
刘基明's avatar
刘基明 committed
36 37 38 39 40 41 42 43 44 45 46 47

    /**
     * 根据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;
刘基明's avatar
刘基明 committed
48
            return topicIds.contains(o.getTopicId());
刘基明's avatar
刘基明 committed
49 50 51
        }).collect(Collectors.toList());
        return sortThemeEntityByIds(themes, recmdIds);
    }
刘基明's avatar
刘基明 committed
52
}