做毕设(十五)——新闻推荐

<script type="text/javascript" th:inline="javascript">
    /*<![CDATA[*/
    $(document).ready(function() {
        var xmlhttp;
        xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                var txt = "";
                var newsList = JSON.parse(xmlhttp.responseText);
                for(var i=0;i<newsList.length;i++){
                    txt += "<div>" +
                        "<div class=\"Fimg\">" + newsList[i].img + "</div>";
                    txt += "<div class=\"Ftitle\"><a href=\"/" + newsList[i].id + "\">" + newsList[i].title + "</a></div>";
                    txt += "</div>";
                }
                $("#newsforyou").html(txt);
            }
        }
        xmlhttp.open("GET","/foryou",true);
        xmlhttp.send();
    });
    /*]]>*/
</script>
<body>
<div class="foryou" th:fragment="foryou">
    <p class="wnqj">为你推荐</p>
    <div id="newsforyou"></div>
</div>
</body>

推荐页面,在网页载入的时候去调方法,载入数据。

public class StringTool {
    /**
     * 特定形式的字符串转化为Map
     * @param s "label=value,label=value,label=value,···"形式的字符串
     * @return
     */
    public Map<String,Integer> StringToMap(String s){
        List<Map<String,Integer>> resultlist = new ArrayList<Map<String,Integer>>();
        List<String> stringList = Arrays.asList(s.split(","));
        Map<String,Integer> map = new HashMap<>();
        for(int i=0;i<stringList.size();i++){
            List<String> list = Arrays.asList(stringList.get(i).split("="));
            map.put(list.get(0),Integer.parseInt(list.get(1)));
            resultlist.add(map);
        }
        return map;
    }



    /**
     * Map加List
     * @param map {"AAA":1,"BBB":2,"CCC":3}
     * @param list {BBB,DDD}
     * @param value 同一个Key加多少
     * @return {"AAA":1,"CCC":3,"BBB":3,"DDD":1}
     */
    public Map<String,Integer> MapAddList(Map<String,Integer> map,List<String> list,Integer value){
        for(int i = 0;i<list.size();i++){
            String label = list.get(i).toString();
            if(map.get(label)!=null){
                map.put(label,map.get(label)+value);
            }else{
                map.put(label,value);
            }
        }
        return map;
    }

    /**
     *
     * @param s1 用户喜好字段
     * @param s2 新闻类型字段
     * @param value 加分
     * @return 同类型加分,没有的类型增加。
     */
    public String typeAdd(String s1,String s2,Integer value){
        String s;
        Map<String,Integer> map = StringToMap(s1);
        List<String> list = Arrays.asList(s2.split(","));
        Map<String,Integer> resultmap = MapAddList(map,list,value);
        s = resultmap.toString();
        //去掉头尾{}和所有空格
        s = s.substring(1,s.length());
        s = s.substring(0,s.length()-1);
        s = s.replaceAll(" ","");
        return s;
    }
}

写个工具类,处理喜好字符串,以便操作。
在用户点击新闻和评论的方法里加上以下代码

//用户喜好加分
if(httpSession.getAttribute("user")!=null){
     User user = (User) httpSession.getAttribute("user");
     StringTool stringTool = new StringTool();
     user.setPreference(stringTool.typeAdd(user.getPreference(),news.getType(),1));
     userService.saveUser(user);
 }

记得在用户注册时给予默认喜好u.setPreference("明星=1,时尚=1,影视=1,宠物=1,生活=1");

@RequestMapping(value = "/foryou")
@ResponseBody
public Object foryou(HttpSession httpSession){
    User user = (User)httpSession.getAttribute("user");
    StringTool stringTool = new StringTool();
    Map<String,Integer> map = stringTool.StringToMap(user.getPreference());
    if(map.size()<10) {
        return "现在还不知道你的喜好,再多看看新闻吧。";
    }
    map.remove("明星");
    map.remove("时尚");
    map.remove("影视");
    map.remove("宠物");
    map.remove("生活");

    //将Map转化为List集合,List采用ArrayList
    List<Map.Entry<String, Integer>> list_Data = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
    //通过Collections.sort(List I,Comparator c)方法进行排序
    Collections.sort(list_Data,new Comparator<Map.Entry<String, Integer>>() {

        @Override
        public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
            return (o2.getValue().compareTo(o1.getValue()));
        }
    });
    List<News> newsList = new ArrayList<>();

    for(int c=0;c<list_Data.size();c++){
        newsList.addAll(newsService.getAllNewsHaveLabel(0, 5, list_Data.get(c).getKey()).getContent());
        for (int i = 0; i < newsList.size() - 1; i++) {
            for (int j = newsList.size() - 1; j > i; j--) {
                if (newsList.get(j).equals(newsList.get(i))) {
                    newsList.remove(j);
                }
            }
        }
        if(newsList.size()>5){
            break;
        }
    }
    PreviewDeal previewDeal = new PreviewDeal();
    newsList = previewDeal.Deal(newsList);
    return newsList;
}

至此,网站大致就写完了,等中期检查看看老师有什么问题吧,有改动再更新。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值