gpt4 book ai didi

java - 根据特定键对 JSONObjects 列表进行排序

转载 作者:行者123 更新时间:2023-11-29 04:39:49 25 4
gpt4 key购买 nike

我需要根据“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

谁能帮我解决这个问题,我怎样才能得到预期的排序结果,谢谢你的帮助。

最佳答案

按如下方式更新您的 compateString 方法:

你需要单独比较id的每一步。

public  static int compareString(String str1, String str2){

String subString = str1.substring(str1.indexOf("##")+3, str1.length());
String subString1 = str2.substring(str2.indexOf("##")+3, str2.length());
String[] array1 = subString.split("-");
String[] array2 = subString1.split("-");
for(int i=0;i< array1.length && i< array2.length;i++) {
BigInteger b1 = new BigInteger(array1[i]);
BigInteger b2 = new BigInteger(array2[i]);
if(b1.compareTo(b2) >0) //b1 is larger than b2
return 1;
if(b1.compareTo(b2) <0)
return -1;

}
if(array1.length == array2.length)//both numbers are equal
return 0;

if(array1.length > array2.length)
return 1;
return -1;

}

关于java - 根据特定键对 JSONObjects 列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39683930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com