在此處輸入影像描述
我的代碼是:
excelSheetRows -> 現有 JSONArray 資料。
JSONArray sortedJsonArray = new JSONArray();
List list = new ArrayList();
for(int i = 0; i < excelSheetRows.length(); i ) {
list.add(excelSheetRows.getJSONObject(i));
}
Collections.sort(list, new Comparator() {
public int compare(JSONObject a, JSONObject b) {
// TODO Auto-generated method stub
String str1 = new String();
String str2 = new String();
try {
str1 = (String)a.get(KEY_NAME);
str2 = (String)b.get(KEY_NAME);
} catch(JSONException e) {
e.printStackTrace();
}
return str1.compareTo(str2);
}
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return 0;
}
});
for(int i = 0; i < excelSheetRows.length(); i ) {
sortedJsonArray.put(list.get(i));
}
它運行成功,但 sortedJsonArray 沒有將相同的名稱組合在一起,例如:
a20190510 a20190529 a20190626 a20190510
文森特 vincent vinagent33 文森特 vincent2222 文森特
請咨詢eeee,我需要所有'vincent'或'a20190510'在一起,需要同名升序組,為什么它不按名稱分組???
uj5u.com熱心網友回復:
問題是您正在初始化沒有任何型別的串列。有關更多說明,請參閱此答案。
如果你這樣做,List list = new ArrayList()你的串列將包含“物件”的實作,因此當你排序時,你將使用帶有物件的比較器,你沒有定義。
要解決您的問題,只需在串列中定義型別:
List<JSONObject> list = new ArrayList<>();
您還需要在比較器中定義型別:
Collections.sort(list, new Comparator<JSONObject>(){...}):
這樣,排序演算法將使用您定義的比較方法。
此外,我可以建議您使代碼更簡單,如果您使用流,實際上只需一行即可對其進行排序:
list = list.stream()
.sorted(Comparator.comparing(json -> json.get(KEY_NAME))
.collect(Collectors.toList());
在 Java 16 及更高版本中更簡短:
list = list.stream()
.sorted(Comparator.comparing(json -> json.get(KEY_NAME))
.toList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/411323.html
標籤:
