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

来源:互联网 发布:原生js手风琴效果原理 编辑:程序博客网 时间:2024/06/11 17:34
<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")@ResponseBodypublic 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;}

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

原创粉丝点击