複雜排序,多維度比較轉化爲單維度

複雜排序,多維度比較轉化爲單維度java

public class AccessPointComparator extends AccessPointComparator{
    private String mSsidConnected;
    public AccessPointComparator(String ssidConnected) {
        this.mSsidConnected = ssidConnected;
    }


    @Override
    public int compare(AccessPoint wifi0, AccessPoint wifi1) {
        //利用分數將多維度參數的比較轉化爲分數的比較
        int score_0 = 0;
        int score_1 = 0;
        if(isConnected(wifi0)) {
            score_0 += 1000;
        }
        if(isConnected(wifi1)) {
            score_1 += 1000;
        }

        String pwd_0 = UnlockCacheManager.getInstance().getDecryptPassword(wifi0.getSSID());
        String pwd_1 = UnlockCacheManager.getInstance().getDecryptPassword(wifi1.getSSID());
        if(!TextUtils.isEmpty(pwd_0)) {
            score_0 += 100;
        }
        if(!TextUtils.isEmpty(pwd_1)) {
            score_1 += 100;
        }

        if (wifi1.getPriority() == wifi0.getPriority()) {
            int signal = 0;
            try {
                score_0 += WiFiSdkManager.calculateSignalLevel( wifi0.getOriginalSignalLevel(), 100);
                score_1 += WiFiSdkManager.calculateSignalLevel( wifi1.getOriginalSignalLevel(), 100);
                signal = score_1
                        - score_0;
            }catch (Exception e) {
                e.printStackTrace();
            }
            if (signal == 0) {
                return wifi1.getStatus().connectSuccessCount - wifi0.getStatus().connectSuccessCount;
            } else {
                return signal;
            }
        } else {
            score_0 += wifi0.getPriority();
            score_1 += wifi1.getPriority();
            return score_1 - score_0;
        }
    }

    /**
     * 是不是當前鏈接的WiFi
     * @param accessPoint
     * @return
     */
    private boolean isConnected(AccessPoint accessPoint) {
        if (!TextUtils.isEmpty(mSsidConnected) && accessPoint.getSSID().equals(mSsidConnected)) {
            return true;
        }
        return false;
    }
}
相關文章
相關標籤/搜索