集合综合案例之——百度实时热榜排行

业务需求:

完成百度实时热榜展示功能:

 

需求说明: (仔细看需求)

完成如上百度热榜展示功能接口,查询排行前10的热点新闻。

需求分析: 1.查询新闻表中新闻数据。

2.根据不同分值比列进行分值计算,然后排序。取前10名。分值计算参考:

3.实时更新热度榜单排行 (难点)

4.自己实现,再看效果图

 

 

业务提示:

0.模拟15条新闻标题,存储到集合中,(建议使用对象存储)

1.展示所有新闻列表,以及热度分值。。。

2.用户选择新闻(打印一行文章操作,例如:1.点赞,2.评论,3.收藏),根据用户不同的操作,添加不同的分值。

 

 

 

 

 

 

 

 

 

 

 

 

效果图:

列表展示

 

 

不同操作的分值增加不一样

 

 

实时更新热度榜单

 

 

参考代码:

/**
* 新闻对象   javaBean
*/
public class News {

   /**
    * 新闻标题
    */
   private String title;

   /**
    * 新闻热度分值
    */
   private int count;

   public News() {
  }

   public News(String title, int count) {
       this.title = title;
       this.count = count;
  }

   public String getTitle() {
       return title;
  }

   public void setTitle(String title) {
       this.title = title;
  }

   public int getCount() {
       return count;
  }

   public void setCount(int count) {
       this.count = count;
  }

   @Override
   public String toString() {
       return "News{" +
               "title='" + title + '\'' +
               ", count=" + count +
               '}';
  }
}





public class Demo {
   public static void main(String[] args) {

       //1.todo 把所有的新闻变成一个对象

       //2.todo 把新闻对象存储到集合中 新闻特点:不能重复 , 可以排序
       //todo TreeSet 什么时候排序 只会一个地方进行,就是add方法
       TreeSet<News> set = new TreeSet(new Comparator<News>() {
           @Override
           public int compare(News o1, News o2) {
               //1.按照分值来进行排序
               int i = o2.getCount() - o1.getCount(); //0
               //2.如果分值一样,需要根据名字来一个自然排序
               //i == 0 ? o2.getTitle().compareTo(o1.getTitle()):i;
               if(i == 0){
                   if(o2.getTitle().equals(o1.getTitle())){
                       return i;
                  }else{
                       return o2.getTitle().compareTo(o1.getTitle()) ;
                  }
              }
               return i;
          }
      });

       //3.todo 创建新闻对象,存储到集合中
       set.add(new News("过半学生可解开游戏防沉迷系统新",464));
       set.add(new News("劳荣枝案一审再次开庭热",496));
       set.add(new News("意大利连续37场不败破巴西纪录",444));
       set.add(new News("阿富汗前总统致歉:欠人民一个解释",422));
       set.add(new News("周江勇案背后的宁波政商震荡热",481));
       set.add(new News("警方通报济南整形机构打人事件",472));
       set.add(new News("欠人民一个解释",422));
       set.add(new News("赤身男子电梯内猥亵女子",416));
       set.add(new News("回顾劳荣枝案:一审当庭翻供不认罪新",401));
       set.add(new News("中方决定向阿富汗提供价值2亿援助热",433));

       while(true){
           //4.todo 打印集合数据
           System.out.println("******************百度热榜*********************");
           for (News news : set) {
               System.out.println(news);
          }
           //5.todo 用户查看新闻
           boolean flag = false;

           Scanner scanner = new Scanner(System.in);
           System.out.println("请选择需要查看的新闻:");
           String s = scanner.nextLine();
           for(News news : set){  //在便利的时候,不能进行增删改操作
               //6.todo 判断找到用户查看的新闻
               if(news.getTitle().equals(s)){
                   //7.todo 如果找到新闻,则进行点赞,评论,收藏
                   System.out.println("请选择需要的操作:1.点赞 \t 2.评论 \t 3.收藏");
                   int i = scanner.nextInt();
                   switch (i){
                       case 1: //代表点赞 3
                           //1.删除原来的对象
                           set.remove(news);
                           News news1 = new News(news.getTitle(),news.getCount()+3);
                           set.add(news1);
                           System.out.println("点赞成功....");
                           flag = true;
                           break;
                       case 2: //代表评论   5
                           set.remove(news);
                           News news2 = new News(news.getTitle(),news.getCount()+5);
                           set.add(news2);
                           System.out.println("评论成功....");
                           flag = true;
                           break;
                       case 3: //代表收藏   8
                           set.remove(news);
                           News news3 = new News(news.getTitle(),news.getCount()+8);
                           set.add(news3);
                           System.out.println("收藏成功....");
                           flag = true;
                           break;
                       default: //代表输入错误
                           System.out.println("输入错误,重新选择.....");
                           break;
                  }
              }
               //todo 如果已经找到了新闻,那么后面的新闻就没有必要再匹配一次了吧
               if(flag){
                   break;
              }
          }
      }
  }
}
 

 

 

 

 

 

 

 

 

 
posted @ 2022-05-16 14:10  Aginbak  阅读(284)  评论(0编辑  收藏  举报