Java实现自定义Comparator比较字符串优先级列表

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

用java帮我实现一个comparator,比较字符串列表,字符串的优先级被定义到一个List中了。

回答:

当然可以!你可以使用Java的Comparator接口来实现自定义的字符串比较器。假设你有一个优先级列表,字符串的优先级由这个列表中的位置决定。下面是一个示例代码:

import java.util.*;

public class CustomStringComparator implements Comparator<String> {
    private List<String> priorityList;

    public CustomStringComparator(List<String> priorityList) {
        this.priorityList = priorityList;
    }

    @Override
    public int compare(String s1, String s2) {
        int index1 = priorityList.indexOf(s1);
        int index2 = priorityList.indexOf(s2);

        // 如果字符串不在优先级列表中,认为它们的优先级最低
        if (index1 == -1) index1 = Integer.MAX_VALUE;
        if (index2 == -1) index2 = Integer.MAX_VALUE;

        return Integer.compare(index1, index2);
    }

    public static void main(String[] args) {
        List<String> priorityList = Arrays.asList("high", "medium", "low");
        CustomStringComparator comparator = new CustomStringComparator(priorityList);

        List<String> stringsToSort = Arrays.asList("low", "medium", "high", "unknown");
        Collections.sort(stringsToSort, comparator);

        System.out.println(stringsToSort);
    }
}

在这个示例中:

  1. CustomStringComparator类实现了Comparator<String>接口,并重写了compare方法。
  2. compare方法根据字符串在优先级列表中的位置来比较两个字符串。如果字符串不在优先级列表中,则认为它们的优先级最低。
  3. main方法中,我们创建了一个优先级列表和一个需要排序的字符串列表,然后使用Collections.sort方法对字符串列表进行排序。

运行这个程序,你会看到输出:

[high, medium, low, unknown]

这表明字符串列表已经根据优先级列表进行了