我有一个包含某些字段的模型。我想在回收站放映前通过分类标题对这种模型进行分类。我的标题在某些部分(例如会话1-第22集)中将数字包含在字符串中。我使用此算法对数字进行排序(例如第22集)为两位数。
sortData.toObservable()
.sorted { o1, o2 ->
val pattern = Pattern.compile("\\d+")
val matcher = pattern.matcher(o1.title)
val matcher2 = pattern.matcher(o2.title)
if (matcher.find()) {
val isFind = matcher2.find()
val o1Num = matcher.group(0).toInt()
val o2Num = if (isFind) {
matcher2.group(0).toInt()
} else {
o1Num + 1
}
return@sorted o1Num - o2Num
} else {
return@sorted o1.title?.compareTo(o2.title ?: "") ?: 0
}
}
.toList()
.subscribeBy(
onError = {
it
},
onSuccess = {
sortData = it
}
)
这种算法的问题是,当我的标题仅包含第22集这样的简单格式,并且数字介于0-99之间时,这是很好的工作,但是当我的标题具有以下格式时:会话1-第22集和数字之间0-999,此算法无法正常工作,我的回收站中没有任何种类的算法。可以帮我解决这个问题吗?
答案 0 :(得分:0)
我找到了解决方案:)
我必须用空格替换第一部分。然后我们可以从字符串中获取第二个部件号,并将其转换为int并对其进行排序。
val matcher = pattern.matcher(o1.title?.replace("session 1", ""))
val matcher2 = pattern.matcher(o2.title?.replace("session 1", ""))