【发布时间】:2016-09-25 06:04:01
【问题描述】:
我需要根据“id”键对 JSONObjects 列表进行排序。我正在使用 collections.sort 和比较器进行排序。我的 id 如下,我需要排序 -
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 数组,然后按字典顺序比较数组。
-
你在使用 java-8 吗?
-
@RamachandranGA 它的 java7
-
@shmosel lexicographical 不能解决问题,我已经试过了。
-
@RishiArora 如果您使用的是 java 8,那将只有 1 行 :))
标签: java sorting collections jsonobject