zoukankan      html  css  js  c++  java
  • 网页评论实现

    业务需求:开发一个评论界面。可以在评论上追加评论(子评论)。

    场景模拟:

    帖子内容:  关于房价增长快速问题的处理。

    评论:

    1     房价涨的太快了。

          1.1      都是政府和开发商合谋圈钱。

         1.1.1   老百姓,能吃上饱饭就可以了。

    分析:

    评论形式是tree结构,我们选择使用tree形式的json数据实现。集合对象中必须包含:

    Id:当前评论id,cpid:上级评论id,text:当前评论内容。

    备注:以下代码只是java模拟,真实情况评论是要显示到html页面中的可以按照这个逻辑开发前端页面。

    代码开发:

    public static void main(String[] args){
    
    
        List<Map<String,String>> lists = new ArrayList<Map<String,String>>();
    
        Map<String,String>  map1 = new HashMap<>();
        map1.put("id","1");
        map1.put("cpid","0");
        map1.put("text","房价涨的太快了。");
    
        Map<String,String>  map2 = new HashMap<>();
        map2.put("id","2");
        map2.put("cpid","1");
        map2.put("text","都是政府和开发商合谋圈钱。");
    
    
        Map<String,String>  map3 = new HashMap<>();
        map3.put("id","3");
        map3.put("cpid","2");
        map3.put("text","老百姓,能吃上饱饭就可以了。");
    
        lists.add(map1);
        lists.add(map2);
        lists.add(map3);
        List<Map<String,String>> listUp = new ArrayList<Map<String,String>>();
        List<Map<String,String>> listTemp = new ArrayList<Map<String,String>>();
        for (int i= 0; i < lists.size();i++){
            Map<String,String>  map = lists.get(i);
            if(map.get("cpid")=="0"){
                listUp.add(map);
                lists.remove(i);
                System.out.println(map.get("text"));
            }
        }
    
        ItentorMap(listUp,lists,listTemp);
    
    
    }
    
    private static void ItentorMap(List<Map<String,String>> listUp,List<Map<String,String>> listDown,List<Map<String,String>> listTemp){
        System.out.println("listUp:"+System.identityHashCode(listUp));
        System.out.println("listTemp:"+System.identityHashCode(listTemp));
        listTemp.clear();
        for (int i=0; i<listUp.size(); i++){
            Map<String,String>  map = listUp.get(i);
            for(int j = 0; j < listDown.size(); j++){
                Map<String,String>  mapj = listDown.get(j);
                if(map.get("id")==mapj.get("cpid")){
                    listTemp.add(mapj);
                    listDown.remove(j);
                    System.out.println(mapj.get("text"));
                }
            }
    
        }
        listUp.clear();
       // 必须这样写,如果写成listUp=listTemp,会导致2个list集合的内存地址一样。
        for (int i = 0;i<listTemp.size(); i++){
            listUp.add(listTemp.get(i));
        }
        System.out.println("listUp:"+System.identityHashCode(listUp));
        System.out.println("listTemp:"+System.identityHashCode(listTemp));
    
        if(listDown.size()>0) {
            ItentorMap(listUp, listDown, listTemp);
        }
    }

    遇到的问题:

    如果2个list之间使用=负责,会导致2个list的指向内存地址一样,最终结果是2个list完全一样,要变都变的结果。

    导致内存地址一样的写法:

      listUp=listTemp

    不改变内存地址赋值的几种写法:

    方式一:

    for (int i = 0;i<listTemp.size(); i++){
            listUp.add(listTemp.get(i));
        }

    方式二:

    listUp.addAll(listTemp);

    方式三:(不推荐)

    缺点:每次赋值都会产生新的内存地址

    listUp = new ArrayList<>(listTemp);

    方式四:(不推荐)

    缺点:声明是必须是ArrayList<String> lists = new ArrayList(); 且如果是ArrayList<Map<String,String>>存在类型转换问题。

    listUp = listTemp.clone();

  • 相关阅读:
    Codeforces Round #579 (Div. 3)
    2019牛客暑期多校训练营(第一场)ABBA
    Comet OJ
    Codeforces Round #562 (Div. 2)
    Codeforces Round #569 (Div. 2)
    寒假集训总结
    线段树做题总结
    Git学习
    unity开发vuforia血的教训
    (学习13)最短圆排列问题
  • 原文地址:https://www.cnblogs.com/gynbk/p/10442371.html
Copyright © 2011-2022 走看看