【问题标题】:Sorting algorithm with Java streams使用 Java 流的排序算法
【发布时间】:2020-12-08 14:21:29
【问题描述】:

有一个随机排列的字符串货币 ISO 代码列表:CHF、USD、AUD、EUR、0995、AED...等。

是否有一种算法可以按以下顺序对其进行排序:首先应该只使用主要货币(美元、瑞士法郎、欧元) - 完全按照这个顺序,然后按字母顺序排列所有其他货币,然后是所有数字货币代码?

到目前为止,我只需创建 3 个单独的列表,对它们进行相应的排序,然后创建 list.addAll,就可以分 3 步完成。希望有任何帮助

【问题讨论】:

    标签: algorithm sorting java-stream


    【解决方案1】:

    创建自定义比较器将是解决这种情况的理想方法。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2011-10-17
      • 2017-03-19
      • 1970-01-01
      • 2013-09-04
      • 2013-07-15
      • 1970-01-01
      相关资源
      最近更新 更多