为了账号安全,请及时绑定邮箱和手机立即绑定

使用比较器,我如何确定对象之间的匹配质量,或者有更好的方法

使用比较器,我如何确定对象之间的匹配质量,或者有更好的方法

潇潇雨雨 2021-07-09 14:01:53
我有一个代码库,我试图在其中确定所提供服务之间的相似性。这些服务有类别。但是,我想通过比较类别集、提供服务所需的时间以及服务成本来确定相似性。我已经编写了代码,它按预期工作(我认为),但我觉得我错过了一些东西,所以我想把它放在这里以获得一些反馈,并获得一些理解。我假设顺序是(根据类别的相似程度判断):1400、1500、800,然后是 1800。但是,实际顺序是:800、1400、1500、1800。我是比较器的新手,我不是当然我这样做是对的。是否有我遗漏的东西或者这是否正常工作,这是我的假设不正确?我知道我正在尝试使用 3 个不同的道具来确定对象匹配的质量,因此类别的相似程度并不能保证我上面提到的顺序,除非它具有更大的权重。从业务逻辑的角度来看,我认为这没有必要。我只是比较器的新手,并试图理解这一点。感谢您提前提供任何帮助!
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您正在寻找相似之处。如果比较两个元素的结果为 0,则这些元素是相同的。否则他们不是。我改变了你的日常:


public int compare(ProjectService o1, ProjectService o2) {

    Set<Category> o1CategorySet = o1.getCategories();

    Set<Category> o2CategorySet = o2.getCategories();

    int categoryMatch = 0;

    double matchQuality = 0.0;


    if ((o1CategorySet != null) && (o2CategorySet != null)) {

        for (Category o1Category : o1CategorySet) {

            for (Category o2Category : o2CategorySet) {

                int match = o1Category.getName().compareTo(o2Category.getName());

                if (match == 0) {

                    categoryMatch++;

                } else {

                    categoryMatch--;

                }

            }

        }

    }


    if (categoryMatch == 0) {

        matchQuality++;

    } else {

        matchQuality--;

    }


    int scaleMatch = o1.getDifficultyScale().getEstimation().compareTo(o2.getDifficultyScale().getEstimation());


    if (scaleMatch == 0) {

        matchQuality++;

    } else {

        matchQuality--;

    }


    int amountMatch = o1.getAmount().compareTo(o2.getAmount());


    if (amountMatch == 0) {

        matchQuality++;

    } else {

        matchQuality--;

    }


    return (int) matchQuality;

}

这样排序应该可以正常工作。


查看完整回答
反对 回复 2021-07-14
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信