返回
「随手记」Java中使用比较器解决按照指定的字符串顺序排序List
后端
2023-12-29 23:16:00
引言
今天工作需求中,有一个小需求,要按照某一个特定的顺序排列一个List。举例:
原始的List中存在3个String元素:
原始List:python,Java,C++
现在需要按照另一个字符串列表中的顺序进行排序,比如给定的字符串顺序列表:
排序顺序:C++,Java,python
那么经过排序后的新List为:
新List:C++,Java,python
Java中使用比较器进行排序
在Java中,可以使用Comparator接口对对象进行排序。Comparator接口提供了一个名为compare()的方法,该方法用于比较两个对象并返回一个int值:
- 如果第一个对象小于第二个对象,则返回-1。
- 如果第一个对象等于第二个对象,则返回0。
- 如果第一个对象大于第二个对象,则返回1。
我们可以实现Comparator接口来定义我们自己的比较规则。在此示例中,我们要按照给定的字符串顺序列表对List进行排序,因此我们需要实现一个比较器,将元素与给定的字符串顺序列表进行比较。
以下是Comparator实现:
import java.util.Comparator;
public class StringComparator implements Comparator<String> {
private List<String> order;
public StringComparator(List<String> order) {
this.order = order;
}
@Override
public int compare(String s1, String s2) {
int index1 = order.indexOf(s1);
int index2 = order.indexOf(s2);
if (index1 == -1) {
return 1;
} else if (index2 == -1) {
return -1;
} else {
return index1 - index2;
}
}
}
在该比较器中,我们维护了一个给定的字符串顺序列表。在比较两个字符串时,我们查找它们在该列表中的索引。如果一个字符串在列表中找不到,则认为它比另一个字符串大。如果两个字符串都在列表中,则我们根据它们的索引进行比较。
应用比较器对List进行排序
有了比较器之后,我们可以使用Collections.sort()方法对List进行排序,如下所示:
List<String> originalList = Arrays.asList("python", "Java", "C++");
List<String> order = Arrays.asList("C++", "Java", "python");
StringComparator comparator = new StringComparator(order);
Collections.sort(originalList, comparator);
System.out.println("排序后的List:" + originalList);
输出:
排序后的List:[C++, Java, python]
结论
通过使用Comparator接口,我们可以灵活地对List进行排序。在本文中,我们展示了如何实现一个比较器,该比较器可以按照给定的字符串顺序列表对List中的字符串进行排序。这种技术可以应用于各种排序场景,为Java程序员提供了强大的工具。