我有字符串列表
例如

**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.comparingthenComparing方法组合比较器条件将更容易理解,从而减少出错的可能性:

list.sort(Comparator.comparing((String str) -> !str.startsWith(query))
        .thenComparing(str -> !str.endsWith(query))
        .thenComparingInt(String::length)
        .thenComparing(Comparator.naturalOrder()));


之所以使用!符号,是为了使我们的true排在false之前。

09-28 13:31