我需要根据“id”键对JSONObjects列表进行排序。我正在使用collections.sort和比较器进行排序。我的ID如下,我需要进行排序 -根据特定键排序JSONObjects列表
9721df798198 ## - 1-2
9721df798198 ## - 1-2-4
9721df798198 ## - 1-2-4-9 -14-16
9721df798198 ## - 1-2-4-9-14-16-26
9721df798198 ## - 1-2-4-9-14-16-26-27
9721df798198 ## - 1-2-4-9-14-16-112
对于排序这些ID我有覆盖比较方法。请参阅下面我的代码 -
Collections.sort(jsonObjList, new Comparator<JSONObject>() {
private static final String KEY_ID = "id";
public int compare(JSONObject o1, JSONObject o2) {
String str1 = new String();
String str2 = new String();
str1 = (String) o1.get(KEY_ID);
str2 = (String) o2.get(KEY_ID);
return compareString(str1, str2);
}
public int compareString(String str1, String str2){
String subString = str1.substring(str1.indexOf("##")+2, str1.length());
String subString1 = str2.substring(str2.indexOf("##")+2, str2.length());
subString = subString.replace("-","");
subString1 = subString1.replace("-","");
return new BigInteger(subString).compareTo(new BigInteger(subString1));
}
});
我用了一个子的ID将同一只将“##”后更改前的“##”来匹配两个字符串作为排序结果,我开始使用这个。这段代码是 -
9721df798198##-1
9721df798198##-1-2
9721df798198##-1-2-4
9721df798198##-1-2-4-9
9721df798198##-1-2-4-9-14-16
9721df798198##-1-2-4-9-14-16-26
9721df798198##-1-2-4-9-14-16-112
9721df798198##-1-2-4-9-14-16-26-27
9721df798198##-1-2-4-9-14-16-112-113
9721df798198##-1-2-4-9-14-16-26-27-28
9721df798198##-1-2-4-9-14-16-26-27-28-29
9721df798198##-1-2-4-9-14-16-112-113-114
但这不是正确的排序结果,排序后的预期结果应该是 -
9721df798198##-1
9721df798198##-1-2
9721df798198##-1-2-4
9721df798198##-1-2-4-9
9721df798198##-1-2-4-9-14-16
9721df798198##-1-2-4-9-14-16-26
9721df798198##-1-2-4-9-14-16-26-27
9721df798198##-1-2-4-9-14-16-26-27-28
9721df798198##-1-2-4-9-14-16-26-27-28-29
9721df798198##-1-2-4-9-14-16-112
9721df798198##-1-2-4-9-14-16-112-113
9721df798198##-1-2-4-9-14-16-112-113-114
请任何人可以帮助我在此,我怎么能得到预期的分类结果,感谢您的帮助。
您正在为每行创建一个巨大的数字。显然,时间越长越高。你需要做的是将每行分割并解析为一个int数组,然后按照字典顺序比较数组。 – shmosel
你在使用java-8吗? –
@RamachandranGA其java7 –