首页 > 解决方案 > Java 按所需字符串排序

问题描述

我对比较器的想法很陌生,我正在研究对字符串进行排序的方法。在下面的代码中,我制作了一个列表并使用该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);
    }



}

如何修改它以使用给定的字符串进行排序,而不是仅按字母顺序排序?例如,如果我给出字符串,BOB那么所有的 BOB 都会移到列表的前面。我之前确实问过一个排序问题,但我误解了排序的想法,它更像是一个过滤问题(java sort list of strings by string value by a user enters)。这个问题与我之前的问题不同,因为现在我正在尝试对字符串进行实际排序和重新排列,而不是过滤它们。

标签: javasortingcomparator

解决方案


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

Comparator<String> bobsFirst = (a, b) -> Boolean.compare(b.startsWith("Bob"), a.startsWith("Bob"));

以这种方式比较它们(首先是b,然后是a)首先将事物以“Bob”开头。

然后,使用自然顺序进行平局:

Comparator<String> comparator = bobsFirst.thenComparing(a -> a);

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

 b.regionMatches(true, 0, "Bob", 0, 3)

推荐阅读