使用重载的
Arrays.sort
函数,该函数将实现
Comparator<T>
作为第二个参数。 实现
Comparator<String>
接口以实现自定义比较。
我使用了一个 HashMap
来为每个条目分配权重/优先级,然后使用此优先级进行比较。具有更高优先级的对象将被视为更大。您可以通过更改 map.put()
的第二个参数来自定义优先级。 Comparator<T>
接口的 compare
函数工作方式是,对于任何两个对象,如果:
- 返回的
int
为负数,则第二个元素较大
- 返回的
int
为0,则两个元素相等
- 返回的
int
为正数,则第一个元素较大
class CustomComparator implements Comparator<String>
{
HashMap<String, Integer> map;
public CustomComparator()
{
map = new HashMap<>();
map.put("Admin", 1);
map.put("Printers", 2);
map.put("Configuration", 3);
map.put("Event Manager", 4);
map.put("Service Desk", 5);
}
public int compare(String s1, String s2) {
return map.get(s1) - map.get(s2);
}
}
class Main {
public static void main(String []args){
System.out.println("Hello World");
String[] usersList = {"Printers", "Configuration","Admin", "Service Desk", "Event Manager"};
System.out.println("Before sorting: ");
Arrays.toString(usersList);
Arrays.sort(usersList, new CustomComparator());
System.out.println("After sorting: ");
Arrays.toString(usersList);
}
}
鉴于 Comparator<T>
是一个功能接口,因此您也可以使用 lambda 表达式在同一函数中定义映射:
HashMap<String, Integer> map = new HashMap<>();
map.put("Admin", 1);
map.put("Printers", 2);
map.put("Configuration", 3);
map.put("Event Manager", 4);
map.put("Service Desk", 5);
Arrays.sort(usersList, (s1, s2) -> map.get(s1) - map.get(s2));
System.out.println("After sorting:");
Arrays.toString(usersList);