複雜排序,多維度比較轉化爲單維度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; } }