我有字符串列表
例如
**united**abc
**united**abcd
abcd**united**
**united**abcde
asdasdad**united**
**united**a
它是根据字符串的长度排序的,但是我的想法是像
**united**a
**united**abc
**united**abcd
**united**abcde
abcd**united**
asdasdad**united**
因此首先出现的字符串以united开头,然后其他单词以united结尾。但我仍然需要保持长度顺序。
我尝试了这个,但这不起作用
if (o1.name.toLowerCase().startsWith(query)) {
return@Comparator -1
} else if (o2.name.toLowerCase().startsWith(query)) {
return@Comparator 1
} else {
return@Comparator 0
}
最佳答案
使用Comparator.comparing
和thenComparing
方法组合比较器条件将更容易理解,从而减少出错的可能性:
list.sort(Comparator.comparing((String str) -> !str.startsWith(query))
.thenComparing(str -> !str.endsWith(query))
.thenComparingInt(String::length)
.thenComparing(Comparator.naturalOrder()));
之所以使用
!
符号,是为了使我们的true排在false之前。