2 mr lufengchao Mr_LuFengChao 于 2015.06.09 16:32 提问

List 存放 Map 的get的前面元素 被覆盖 ,求解

<%
List listMainBoard =(List) mapboard.get(new Integer(0));
Board mainBoard=new Board();

                        for(int i=0;i<listMainBoard.size();i++)
                        {
                            //循环取得主版块
                            mainBoard=((Board)listMainBoard.get(i));

                    %>
                    <tr>
                        <td colspan="4"><%=mainBoard.getBoardName() %></td>
                    </tr>
                    <%
                        //子版块
                **List listSonBoard =(List)mapboard.get(new Integer(mainBoard.getBoardId()));**
                    //out.print(mainBoard.getBoardId()); 返回主版块ID,即parentId 为 0
                    if(listSonBoard!=null){
                for(int j=0;j<listSonBoard.size();j++)
                        {
                            //循环取得子版块
                            Board sonBoard=(Board)listSonBoard.get(j);
                            //最后发表的主题
                            Topic topic =new Topic();
                            //最后发表的作者
                            User user=new User();
                            int boardId =sonBoard.getBoardId();
                            //取得该版块的主题列表
                            List listTopic=new TopicDAO().findListTopic(1, boardId);

                            if(listTopic!=null&&listTopic.size()>0)
                            {
                                //取的最后发表的帖子
                                topic=(Topic)listTopic.get(0);
                                user=new UserDAO().findById(topic.getuId());
                                out.print("用户:"+user.getuName());
                            }
                    %>
                    List listSonBoard =(List)mapboard.get(new Integer(mainBoard.getBoardId())); 这边只保存了map的最后一组元素,前面的被覆盖了,怎么回事啊,求解答,谢谢

5个回答

oQingXin12345
oQingXin12345   2015.06.09 17:17
已采纳

因为你是在for循环里定义的listSonBoard,这时候每循环一次时的listSonBoard都是一个新的集合,所以之前的listSonBoard中的内容都没了,你应该在for循环的外部定义List listSonBoard=new ArrayList();然后在for循环的时候listSonBoard.add()将新增的内容添加到集合里面。

oQingXin12345
oQingXin12345 回复Jone_Chao: 不好意思啊,看错意思了,那就应该是mapboard的get方法的问题了
2 年多之前 回复
Mr_LuFengChao
Mr_LuFengChao 并不是这个原因啊,试了还是这样!
2 年多之前 回复
newstone001
newstone001   2015.06.09 17:10

帮忙顶。

网站前端开发工程师 HTML5 CSS3 平板网页开发
http://jobs.zhaopin.com/773356571250019.htm

danielinbiti
danielinbiti   Ds   Rxr 2015.06.09 17:38

先看后台map返回的个数对不对,分清是前端问题还是后台问题

danielinbiti
danielinbiti 回复Jone_Chao: 没明白你表达的意思
2 年多之前 回复
Mr_LuFengChao
Mr_LuFengChao mapboard.get()读取并赋值给list 后 就变成了所读取的最后一组数据,前面的没有了
2 年多之前 回复
Mr_LuFengChao
Mr_LuFengChao 在List listSonBoard =(List)mapboard.get(new Integer(mainBoard.getBoardId()));中,mainBoard.getBoardId()返回了四组数据,
2 年多之前 回复
guonan198811
guonan198811   2015.06.09 19:13

二楼正解,应该就是那个问题,我就不重复了。

guonan198811
guonan198811 回复Jone_Chao: List <类型> list = new List<类型>(); list.add()
2 年多之前 回复
Mr_LuFengChao
Mr_LuFengChao 可是我把定义放在了for的最外面了,还是只读到了最后一个。不知道哪里错了,求教
2 年多之前 回复
guonan198811
guonan198811   2015.06.09 19:47

C#里的代码一般是这个样子的 List list1 = new List(); list1.add(你要添加的项); 最后list1中就是你想要的数据,我对java不熟,不知道是不是这个样子。还有就是你的那个get 函数返回的是单个值吧?你把单个值赋值给list最后当然是一个啦

guonan198811
guonan198811 回复Jone_Chao: 给个采纳或者好评呗!~~
2 年多之前 回复
Mr_LuFengChao
Mr_LuFengChao 好的 ,谢谢!
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片