昨天修改一个以前写的代码,发现代码有些看不懂了 代码如下

public List findAssetFactorQuestionList() {
        String userId = UserUtils.getUser().getId();
        // 从这往下
        List answerList = stFactorIndexDataQualMapper.findQuestionIdAndAnswerListByResearcher(userId);
        List assetFactorList = dao.findAssetFactorQuestionList(userId);
        // 将答案构建Map
        Map answerMap = new HashMap<>();
        // 根据资产id分组
        for (StQuestionIdAndAnswerVo item : answerList) {
            String assetId = item.getAssetId();
            String factorId = item.getFactorId();
            String questionId = item.getQuestionId();
            answerMap.put(assetId + factorId + questionId, item);
        }

        assetFactorList.stream().forEach(i -> {
            String assetId = i.getAssetId();
            String factorId = i.getFactorId();
            String questionId = i.getQuestionId();
            StQuestionIdAndAnswerVo a = answerMap.get(assetId + factorId + questionId);
            if (a != null) {
                String score = a.getAnswer();
                // 后续想办法合并到findQuestionIdAndAnswerListByResearcher这个SQL里
                Date lastDate = stFactorIndexDataQualMapper.findDifferentAnswerDate(assetId, factorId, questionId, score);
                if (lastDate != null) {
                    // 天数向上取整
                    double day = Math.ceil(DateUtils.getDistanceOfTwoDate(lastDate, a.getUpdateDate()));
                    a.setLastChangeDay((int) day);
                }
            }
            i.setLastAnswer(a);
        });
        // 从这向上
        return dao.findAssetFactorQuestionList(userId);
    }

可以看出中间的代码一点作用没有 我开始获取了一下当前用户的id然后直接mapper返回 中间的代码可有可无

奇怪的事情发生了 当我把中间的代码去掉 两次的返回值变得不一样了

后续根据探索 发现Mapper多次请求返回值为同一引用

以下代码即可证明我的猜想

List list1 = dao.findAssetFactorQuestionList(userId);
List list2 = dao.findAssetFactorQuestionList(userId);
System.out.printLn(list1 == list2); // true