Sorting 如何对包含数字的字符串进行数字排序?

Sorting 如何对包含数字的字符串进行数字排序?,sorting,kotlin,collections,Sorting,Kotlin,Collections,因此,我得到一些json数据,并将其放入可变列表中。我有一个id、listId和name在其中的类。我试图按listId对列表的输出进行排序,listId只是整数,然后是格式为“Item 123”的名称。我在做下面的事情 val sortedList = data.sortedWith(compareBy({ it.listId }, { it.name })) 这将正确排序listId,但名称按字母顺序排序,因此数字为1、13、2、3。我如何既能对这两个类别进行排序,又能对“名称”进行数字排

因此,我得到一些json数据,并将其放入可变列表中。我有一个id、listId和name在其中的类。我试图按listId对列表的输出进行排序,listId只是整数,然后是格式为“Item 123”的名称。我在做下面的事情

val sortedList = data.sortedWith(compareBy({ it.listId }, { it.name }))
这将正确排序listId,但名称按字母顺序排序,因此数字为1、13、2、3。我如何既能对这两个类别进行排序,又能对“名称”进行数字排序

val sortedList = data.sortedWith(compareBy(
    { it.listId },
    { it.name.substring(0, it.name.indexOf(' ')) },
    { it.name.substring(it.name.indexOf(' ') + 1).toInt() }
))
可以工作,但计算效率不高,因为它会多次调用
String.indexOf()


如果你有一个很长的列表,你应该考虑另一个列表,每个条目都有<代码>字符串 >和<代码> int >代码>名称。< /p>所有的名字都是数字吗?如果是这样,为什么不将

name
属性设置为
Int
类型?如果不是,一个数字应该在一个非数字之前还是之后排序?@Sweeper所有的名称都是字符串,后面跟一个空格,然后是一个数字。我无法将其转换为int,因为有时名称为空,需要删除这些名称。我认为前后不重要,因为字符串总是相同的。@Jaakko排序之前,您可以通过
List.filter()
List.filterNot()
过滤掉空名称的元素。这样做了。非常感谢。