Java 如何按数字顺序对字符串和数字列表进行排序?

Java 如何按数字顺序对字符串和数字列表进行排序?,java,android,json,arraylist,Java,Android,Json,Arraylist,我如何以非正规的方式修复id的排序,如下所示: 1 10 11 .. 2 20 21 .. 我想打印如下内容: 1 2 3 .. 10 11 .. 此外,my MainData.getName包含字符串和数字,最多包含1000个列表数组,请参阅my app image链接: 这是我的应用程序图像:[1]: 我试过了,但结果是一样的 int[] range = IntStream.rangeClosed(1, 1000).toArray(); List<String> ran

我如何以非正规的方式修复id的排序,如下所示:

 1
10
11
..
2
20
21
..
我想打印如下内容:

1
2
3
..
10
11
..
此外,my MainData.getName包含字符串和数字,最多包含1000个列表数组,请参阅my app image链接:

  • 这是我的应用程序图像:[1]:
我试过了,但结果是一样的

int[] range = IntStream.rangeClosed(1, 1000).toArray();
List<String> rangeList = new ArrayList<>();
for (int number : range) {
    rangeList.add(String.valueOf(number));
}

由于listId是字符串,因此列表按字母顺序排序。相反,您可以先将字符串转换为整数,然后对其进行排序。下面是插图

Collections.sort(tempList, (mainData, t1) -> Integer.parseInt(mainData.getListId())-Integer.parseInt(t1.getListId());

由于listId是字符串,因此列表按字母顺序排序。相反,您可以先将字符串转换为整数,然后对其进行排序。下面是插图

Collections.sort(tempList, (mainData, t1) -> Integer.parseInt(mainData.getListId())-Integer.parseInt(t1.getListId());
这应该能解决你的问题。但是,此代码要求MainData对象的名称字段应始终采用“Item XXX”格式,其中XXX是一个数字


这应该能解决你的问题。但是,此代码要求MainData对象的名称字段应始终采用“Item XXX”格式,其中XXX是一个数字。

bro名称是一个字符串,但当我更改您给我命名的代码时,应用程序停止并说:java.lang.NumberFormatException:对于输入字符串:“Item 276”我也按id分类,效果很好,但当我按名字分类时,它会说:;java.lang.NumberFormatException:对于输入字符串:“Item 276”要求按名称排序当然,如果您尝试将“Item 276”转换为整数,它将引发数字格式异常。整个列表包含如下数字:Item with Number我该怎么做。如果我真的试着抓住它,它会忽略整个排序的事情。谢谢你,这个答案也有效。非常感谢你,这个名字是一个字符串,但当我更改你给我命名的代码时,应用程序停止并说:java.lang.NumberFormatException:对于输入字符串:“Item 276”我也按id排序,它工作得很好,但当我按名称排序时,它说:;java.lang.NumberFormatException:对于输入字符串:“Item 276”要求按名称排序当然,如果您尝试将“Item 276”转换为整数,它将引发数字格式异常。整个列表包含如下数字:Item with Number我该怎么做。如果我真的试着抓住它,它会忽略整个排序的事情。谢谢你,这个答案也有效。非常感谢感谢你这么多的工作,谢谢你的时间我怎么能学会所有的员工兄弟,当我做某事的时候我总是被绊倒谢谢你这么多的工作,谢谢你的时间我怎么能学会所有的员工兄弟,当我做某事的时候我总是被卡住
Collections.sort(tempList, (mainData, t1) -> Integer.parseInt(mainData.getListId())-Integer.parseInt(t1.getListId());
Collections.sort(tempList, (o1, o2) -> {
    // splitting name with respect to white space and setting the integer part in a local variable to compare 
    Integer n1 = Integer.parseInt(o1.getName().split(" ")[1]);
    Integer n2 = Integer.parseInt(o2.getName().split(" ")[1]);
    return n1.compareTo(n2);
});