咿呀学语ヾ(^▽^*))) 2024-05-12 17:13 采纳率: 58.8%
浏览 1

为什么我的data只能存一条数据

我想遍历所有笔记所有用户,然后给他们的行
为加权之后,存到data里面,但是data里面每次
都只有一条数据,我代码哪里写错了吗?
我用户A收藏了笔记1,2,3,我用户B收藏了笔记1,所以应该得到4个数组,4条数据,这4条数据的index都大于1。所以不可能是数据不够不符合条件的问题,但不知道啥问题。
以下是我的代码:

// 定义一个存储每个笔记和每个用户关系的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);
                }
            }

        }

  • 写回答

4条回答 默认 最新

  • 笑面虎 2024-05-12 17:13
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:你的目的是要解决在遍历所有笔记和所有用户之后,将他们之间的行为加权关系存储到 data 列表中,但发现 data 列表中每次只存储了一条数据的问题。

    【问题出现原因】:根据你提供的代码和描述,问题可能出现在循环逻辑上。你的 index 变量在每次遍历用户之前没有重置,导致它在第一次遍历笔记时累加,然后在后续的用户遍历中继续累加,而不是为每个新的用户重置为1。

    【问题解决方案】:你需要在遍历用户的内部循环之前重置 index 变量,确保每个用户的行为加权指数是独立的。

    【提供代码】:以下是修改后的代码:

    // 定义一个存储每个笔记和每个用户关系的List
    List<Associate> data = new ArrayList<>();
    // 计算每篇笔记和每个用户之间的关系指数
    for (Notebook notebook : allNotebook) {
        Integer notebookId = notebook.getId();
        for (User user : allUsers) {
            // 重置index为1,为每个新的用户开始计算
            int index = 1;
            Integer userId = user.getId();
            // 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> likesOptional = allLikes.stream().filter(x -> x.getFid().equals(notebookId) && x.getUserId().equals(userId)).findFirst();
            if (likesOptional.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);
            }
        }
    }
    

    【代码运行方式】:这段代码应该在你的Java环境中运行,作为你现有程序的一部分。确保 allNotebookallUsersallCollectsallLikesallComments 都已经正确初始化并填充了数据。

    【代码预期运行结果】:代码将为每个用户和笔记的组合计算一个加权指数,如果指数大于1,就会创建一个新的 Associate 对象并将其添加到 data 列表中。最终,data 列表中应该有4条数据,每条数据代表一个用户对笔记的行为加权关系。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月12日

悬赏问题

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