使用Java流的排序算法
有一个随机顺序的字符串货币 ISO 代码列表:CHF、USD、AUD、EUR、0995、AED...等。
是否有一种算法可以按以下顺序对其进行排序:首先应该只使用主要货币(美元、瑞士法郎、欧元)——完全按照这个顺序,然后按字母顺序排列所有其他货币,然后是所有数字货币代码?
到目前为止,我通过简单地创建 3 个单独的列表,对它们进行相应排序,然后制作 list.addAll 来分 3 个步骤来完成。将不胜感激任何帮助
回答
创建自定义比较器将是解决这种情况的理想方法。
public class CurrencyComparator implements Comparator<String> {
public static void main(String[] args) {
List<String> currencyList = Arrays.asList("CHF", "USD", "AUD", "EUR", "0995", "AED");
currencyList.sort(new CurrencyComparator());
currencyList.forEach(System.out::println);
}
private int getTypeOrder(String cur) {
switch (cur) {
case "USD":
return 0;
case "CHF":
return 1;
case "EUR":
return 2;
default:
return cur.matches("[A-Za-z]*") ? 3 : 4;
}
}
@Override
public int compare(String cur1, String cur2) {
int typeOrder1 = getTypeOrder(cur1);
int typeOrder2 = getTypeOrder(cur2);
if (typeOrder1 != typeOrder2) {
return Integer.compare(typeOrder1, typeOrder2);
}
return cur1.compareTo(cur2);
}
}
它将产生以下输出
USD
CHF
EUR
AED
AUD
0995