Java按所需的字符串排序

PaP*_*nG0 2 java sorting comparator

我是比较器概念的新手,我正在研究对字符串进行排序的方法。在下面的代码中,我列出了一个列表,并使用Collections.sort()方法对其进行了排序。这是代码:

public class ComparatorTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        List<String> list = new ArrayList<String>();
        list.addAll(Arrays.asList("Bob Stone", "Jordan Brand", "Bob Mass", "Dylan Walsh","Tom Mavis","Bob Ganley"));
        System.out.println("Before sort "+ list);
        Collections.sort(list);
        System.out.println("After sort "+ list);
    }



}
Run Code Online (Sandbox Code Playgroud)

如何修改此字符串以使用给定的String进行排序,而不只是按字母顺序排序?例如,如果我输入字符串,BOB则所有BOB都将移至列表的开头。之前我确实问过排序问题,但是我误解了排序的概念,而更多地是一个过滤问题(java按用户输入的字符串值对字符串进行排序的列表)。这个问题与之前的问题有所不同,因为现在我正在尝试对字符串进行排序和重新排列,而不是对其进行过滤。

And*_*ner 5

您可以使用该Boolean.compare方法检查字符串是否以“ Bob”开头:

Comparator<String> bobsFirst = (a, b) -> Boolean.compare(b.startsWith("Bob"), a.startsWith("Bob"));
Run Code Online (Sandbox Code Playgroud)

这样比较它们(首先是b,然后是a),则首先将“ Bob”开头。

然后,使用自然顺序打破平局:

Comparator<String> comparator = bobsFirst.thenComparing(a -> a);
Run Code Online (Sandbox Code Playgroud)

请注意,这startsWith是区分大小写的。要忽略“鲍勃”的情况,您可以将替换为b.startsWith("Bob")(类似于a):

 b.regionMatches(true, 0, "Bob", 0, 3)
Run Code Online (Sandbox Code Playgroud)