使用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


以上是使用Java流的排序算法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>