咿呀学语ヾ(^▽^*))) 2024-05-12 16:42 采纳率: 58.8%
浏览 5
已结题

为什么我的data里面只有一条数组数据

我想遍历所有笔记所有用户,然后给他们的行为加权之后,存到data里面,但是data里面每次都只有一个数据,我代码哪里写错了吗?
以下是我的代码:

// 定义一个存储每个笔记和每个用户关系的List
        List<Associate> data = new ArrayList<>();
//        计算每篇笔记和每个用户之间的关系指数
        for (Notebook notebook : allNotebook) {
            int index = 1;//遍历笔记
            Integer notebookId = notebook.getId();
            for (User user : allUsers) {//遍历用户
                Integer userId = user.getId();
               //指数设置为1
                // 1. 判断该用户有没有收藏该商品,收藏的权重:3
                Optional<Collect> collectOptional = allCollects.stream().filter(x -> x.getFid().equals(notebookId) && x.getUserId().equals(userId)).findFirst();
                if (collectOptional.isPresent()) {
                    index += 3;
                }
                // 2. 判断该用户有没有点赞该商品,点赞权重: 1
                Optional<Likes> cartOptional = allLikes.stream().filter(x -> x.getFid().equals(notebookId) && x.getUserId().equals(userId)).findFirst();
                if (cartOptional.isPresent()) {
                    index += 1;
                }
                // 3. 判断该用户有没有评论过笔记,评论的权重: 1
                Optional<Comment> commentOptional = allComments.stream().filter(x -> x.getFid().equals(notebookId) && x.getUserId().equals(userId)).findFirst();
                if (commentOptional.isPresent()) {
                    index += 1;
                }
                if (index > 1) {
                    Associate associate = new Associate(userId,notebookId,index);
                    data.add(associate);
                }
            }

        }

  • 写回答

5条回答 默认 最新

  • 关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    根据你提供的代码和问题描述,可能是以下几个原因导致的:

    1. 遍历allNotebook的时候,可能只有一个笔记,这样在for循环里面只会添加一条数据到data中。你可以在for循环外部打印一下allNotebook.size()确认一下。

    2. data只有一条数据是因为在循环的时候,如果index=1的时候,就不会创建Associate对象,更不会添加进data里面。所以你需要确认一下条件判断是否正确

    为了解决这个问题,我可以提供如下解决方案:

    1. 确认allNotebook里面有多少笔记,如果只有一条笔记,那么就不能用这个笔记去遍历所有的用户,这种情况下只会有一条数据。

    2. 确认条件判断是否正确,可能需要调整判断的顺序,保证每个笔记和每个用户都被遍历到,并且被正确处理后,才会添加到data中。

    下面是修改后的代码,你可以参考一下:

    List<Associate> data = new ArrayList<>();
    for (Notebook notebook : allNotebook) {
        Integer notebookId = notebook.getId();
        for (User user : allUsers) {
            Integer userId = user.getId();
            int index = 1;
            // 1. 判断该用户有没有收藏该笔记,收藏的权重:3
            Optional<Collect> collectOptional = allCollects.stream().filter(x -> x.getFid().equals(notebookId) && x.getUserId().equals(userId)).findFirst();
            if (collectOptional.isPresent()) {
                index += 3;
            }
            // 2. 判断该用户有没有点赞该笔记,点赞权重: 1
            Optional<Likes> cartOptional = allLikes.stream().filter(x -> x.getFid().equals(notebookId) && x.getUserId().equals(userId)).findFirst();
            if (cartOptional.isPresent()) {
                index += 1;
            }
            // 3. 判断该用户有没有评论过笔记,评论的权重: 1
            Optional<Comment> commentOptional = allComments.stream().filter(x -> x.getFid().equals(notebookId) && x.getUserId().equals(userId)).findFirst();
            if (commentOptional.isPresent()) {
                index += 1;
            }
            if (index > 1) {
                Associate associate = new Associate(userId, notebookId, index);
                data.add(associate);
            }
        }
    }
    

    在修改后的代码中,我将循环的顺序调整了一下,并删除了一些不必要的代码,同时添加了一个index变量,用于计算权重指数。如果判断条件满足,就创建一个Associate对象,并添加到data里面。这样就能保证每个笔记和每个用户都被遍历到,并被正确处理后添加到data中。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月12日
  • 创建了问题 5月12日

悬赏问题

  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费
  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
  • ¥15 Workbench中材料库无法更新,如何解决?