我有車輛列表。我想根據製造商對這些車輛進行分類。訂單被定義在另一個數組中。根據關鍵字進行Java排序
此代碼與兩個品牌「本田」和「起亞」的排列很好。在起亞之上,本田和本田之上的其他車型排在前列。是否有可能使它的大小變化的數組通用。如果陣列是「雪佛蘭」,「道奇」,「福特」呢?
感謝
//This sorts Honda first, Kia second, and others after.
final String[] makes = new String[]{"Honda","Kia"};
Collections.sort(vehicles, new Comparator<Vehicle>() {
@Override
public int compare(Vehicle o1, Vehicle o2) {
String makeObj1 = o1.getModel().getMakeName().toLowerCase();
String makeObj2 = o2.getModel().getMakeName().toLowerCase();
//honda first
if (makeObj1.equals(makes[0].toLowerCase())) {
if (makeObj2.equals(makes[0].toLowerCase())) {
return 0;//honda = honda
}
if (makeObj2.equals(makes[1].toLowerCase())) {
return -1;//honda > kia
} else {
return -1;//honda > others
}
}
//kia first
if (makeObj1.equals(makes[1].toLowerCase())) {
if (makeObj2.equals(makes[0].toLowerCase())) {
return 1;//kia < honda
}
if (makeObj2.equals(makes[1].toLowerCase())) {
return 0;//kia = kia
} else {
return -1;//kia > others
}
}
//honda second
if (makeObj2.equals(makes[0].toLowerCase())) {
if (makeObj1.equals(makes[1].toLowerCase())) {
return 1;//kia < honda
} else {
return 1;//other < honda
}
}
//kia second
if (makeObj2.equals(makes[1].toLowerCase())) {
return 1;//others < kia
}
return 0;//all cases should been covered
}
});
它沒有爲第一個使用陣列工作。兩輛本田之間發現閃避:P 無論如何,我會繼續努力吧! – David
是否需要「toLowerCase」調用?由於調用'indexOf('honda')'會產生'-1',這些調用正在破壞算法,因此我的解決方案不起作用。無論如何,我希望你得到了我想要做的事情(使用'makes'數組的索引來排序'Vehicle')。順便說一句,作爲起亞的擁有者,我認爲你應該把他們放在第一位! :P – orique
+1,確實,「toLowerCase」是這裏的問題。如果區分大小寫不重要,那麼只需手動循環「生成」-array並使用String-class的「equalsIgnoreCase」函數即可。 – ultddave