亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用比較器,我如何確定對象之間的匹配質量,或者有更好的方法

使用比較器,我如何確定對象之間的匹配質量,或者有更好的方法

瀟瀟雨雨 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 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號